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] 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 | 11439 +++++++++------- 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 | 16 +- stationeers_data/src/templates.rs | 134 +- 27 files changed, 8112 insertions(+), 5236 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<(usize, &Slot)> { + self.slots() + .iter() + .map(|(index, slot)| (*index as usize, slot)) + .collect() } - fn get_slots(&self) -> Vec<&Slot> { - self.slots().iter().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 get_slots_mut(&mut self) -> Vec<&mut Slot> { - self.slots_mut().iter_mut().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 ReagentConsumer { + fn can_process_reagent(&self, reagent: u8) -> bool; + fn get_resources_used(&self) -> Vec; } - pub trait ReagentInterface: Device { - /// Reagents required by current recipe - fn get_current_recipe(&self) -> Vec<(i32, f64)>; + 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 : + Recipe { target_prefab : "ItemTomatoSoup".into(), target_prefab_hash + : 688734890i32, tier : MachineTier::TierOne, time : 5f64, energy : + 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : vec![("Oil" + .into(), 1f64), ("Steel".into(), 1f64), ("Tomato".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemPumpkinSoup" + .into(), target_prefab_hash : 1277979876i32, tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 2i64, reagents : vec![("Milk".into(), 200f64), ("Steel" - .into(), 1f64)] .into_iter().collect() }), ("ItemCannedEdamame" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + 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![("Oil" - .into(), 1f64), ("Soy".into(), 15f64), ("Steel".into(), 1f64)] - .into_iter().collect() }), ("ItemCannedMushroom".into(), Recipe { + .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() }), - ("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 : + .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), ("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 : + .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), ("Pumpkin".into(), 2f64), - ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemTomatoSoup" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + 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 : 3i64, reagents : vec![("Oil" - .into(), 1f64), ("Steel".into(), 1f64), ("Tomato".into(), 5f64)] - .into_iter().collect() }) + .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,485 +22335,539 @@ 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 : - MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : + 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![("Silicon".into(), 2f64)] - .into_iter().collect() }), ("ItemIronFrames".into(), Recipe { tier : - MachineTier::TierOne, time : 4f64, energy : 200f64, temperature : + 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![("Iron".into(), 4f64)] - .into_iter().collect() }), ("ItemIronSheets".into(), Recipe { tier : - MachineTier::TierOne, time : 1f64, energy : 200f64, temperature : + 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![("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 : + count_types : 1i64, reagents : vec![("Silicon".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemStelliteGlassSheets".into(), target_prefab_hash : - + 2038663432i32, tier : MachineTier::TierOne, time : 1f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Silicon".into(), 2f64), ("Stellite".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemSteelSheets" + .into(), target_prefab_hash : 38555961i32, tier : + MachineTier::TierOne, time : 3f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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, + 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 : 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 }, + .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 : 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 : + 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() }), ("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 : + .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 : 2i64, reagents : vec![("Copper".into(), 3f64), ("Iron" - .into(), 7f64)] .into_iter().collect() }), - ("ItemKitElectronicsPrinter".into(), Recipe { tier : - MachineTier::TierOne, time : 120f64, energy : 12000f64, temperature : + count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitCompositeCladding".into(), target_prefab_hash : - + 1470820996i32, tier : MachineTier::TierOne, time : 1f64, energy : + 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitWall".into(), target_prefab_hash : - 1826855889i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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, + count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitReinforcedWindows".into(), target_prefab_hash : + 1459985302i32, tier : MachineTier::TierOne, time : 7f64, energy : + 700f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : + vec![("Astroloy".into(), 2f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitWindowShutter".into(), target_prefab_hash : + 1779979754i32, tier : MachineTier::TierOne, time : 7f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Solder".into(), 1f64), ("Steel".into(), 2f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitLadder".into(), + target_prefab_hash : 489494578i32, tier : MachineTier::TierOne, time + : 3f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, - reagents : vec![("Iron".into(), 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 : + 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 : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" - .into(), 20f64)] .into_iter().collect() }), - ("ItemKitHydraulicPipeBender".into(), Recipe { tier : - MachineTier::TierOne, time : 180f64, energy : 18000f64, temperature : + 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 : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" - .into(), 2f64), ("Iron".into(), 20f64)] .into_iter().collect() }), - ("ItemKitInteriorDoors".into(), Recipe { tier : MachineTier::TierOne, + 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), ("Iron".into(), 5f64)] - .into_iter().collect() }), ("ItemKitLadder".into(), Recipe { tier : - MachineTier::TierOne, time : 3f64, energy : 200f64, temperature : + 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 : 1i64, reagents : vec![("Iron".into(), 2f64)] - .into_iter().collect() }), ("ItemKitLocker".into(), Recipe { tier : + 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 : 1i64, reagents : vec![("Iron".into(), 5f64)] - .into_iter().collect() }), ("ItemKitPipe".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : + 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 : 1i64, reagents : vec![("Iron".into(), 0.5f64)] - .into_iter().collect() }), ("ItemKitRailing".into(), Recipe { tier : - MachineTier::TierOne, time : 1f64, energy : 100f64, temperature : + 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 : 1i64, reagents : vec![("Iron".into(), 1f64)] - .into_iter().collect() }), ("ItemKitRecycler".into(), Recipe { tier : - MachineTier::TierOne, time : 60f64, energy : 12000f64, temperature : + 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(), 10f64), ("Iron" - .into(), 20f64)] .into_iter().collect() }), - ("ItemKitReinforcedWindows".into(), Recipe { tier : - MachineTier::TierOne, time : 7f64, energy : 700f64, temperature : + 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![("Astroloy".into(), 2f64)] - .into_iter().collect() }), ("ItemKitRespawnPointWallMounted".into(), - Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 500f64, + 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 : 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 : + .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 : 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 : + 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 : 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 : + 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 { - tier : MachineTier::TierOne, time : 5f64, energy : 500f64, - temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : - false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, - is_valid : 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 : + .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(), 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 : + 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() }), ("ItemKitWallArch".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + .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![("Steel".into(), 1f64)] - .into_iter().collect() }), ("ItemKitWallFlat".into(), Recipe { tier : + 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![("Steel".into(), 1f64)] - .into_iter().collect() }), ("ItemKitWallGeometry".into(), Recipe { + 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 : 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 : + .collect() }, count_types : 3i64, reagents : vec![("Constantan" + .into(), 2f64), ("Electrum".into(), 2f64), ("Iron".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitSDBHopper" + .into(), target_prefab_hash : 323957548i32, tier : + MachineTier::TierOne, time : 10f64, energy : 700f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 15f64)] + .into_iter().collect() }, Recipe { target_prefab : "KitSDBSilo" + .into(), target_prefab_hash : 1932952652i32, tier : + MachineTier::TierOne, time : 120f64, energy : 24000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" + .into(), 20f64), ("Steel".into(), 15f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemKitCompositeFloorGrating".into(), + target_prefab_hash : 1182412869i32, tier : MachineTier::TierOne, time + : 3f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, - reagents : vec![("Silicon".into(), 0.5f64)] .into_iter().collect() - }), ("ItemSpaceHelmet".into(), Recipe { tier : MachineTier::TierOne, - time : 15f64, energy : 500f64, temperature : RecipeRange { start : + 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(), 2f64), ("Gold".into(), 2f64)] - .into_iter().collect() }), ("ItemSteelFrames".into(), Recipe { tier : - MachineTier::TierOne, time : 7f64, energy : 800f64, temperature : + 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 : 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(), 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 : 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 : + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "KitStructureCombustionCentrifuge".into(), target_prefab_hash : + 231903234i32, tier : MachineTier::TierTwo, time : 120f64, energy : + 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Constantan".into(), 5f64), ("Invar".into(), 10f64), ("Steel" + .into(), 20f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitDeepMiner".into(), target_prefab_hash : - 1935075707i32, tier + : MachineTier::TierTwo, time : 180f64, energy : 72000f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 4i64, reagents : vec![("Constantan".into(), 5f64), + ("Electrum".into(), 5f64), ("Invar".into(), 10f64), ("Steel".into(), + 50f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitCrateMount".into(), target_prefab_hash : - 551612946i32, tier + : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitCrate" + .into(), target_prefab_hash : 429365598i32, tier : + MachineTier::TierOne, time : 10f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitCrateMkII" + .into(), target_prefab_hash : - 1585956426i32, tier : + MachineTier::TierTwo, time : 10f64, energy : 200f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Gold".into(), 5f64), ("Iron" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemSpaceHelmet".into(), target_prefab_hash : 714830451i32, tier : + MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemEvaSuit".into(), target_prefab_hash : 1677018918i32, tier : + MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemEggCarton".into(), target_prefab_hash : - 524289310i32, tier : + MachineTier::TierOne, time : 10f64, energy : 100f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Silicon".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemCoffeeMug" + .into(), target_prefab_hash : 1800622698i32, tier : + MachineTier::TierOne, time : 1f64, energy : 70f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemKitFlagODA" + .into(), target_prefab_hash : 1701764190i32, tier : + MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 3i64, reagents : vec![("Constantan".into(), 5f64), - ("Invar".into(), 10f64), ("Steel".into(), 20f64)] .into_iter() - .collect() }) + count_types : 1i64, reagents : vec![("Iron".into(), 8f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitRespawnPointWallMounted".into(), target_prefab_hash : + 1574688481i32, tier : MachineTier::TierOne, time : 20f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 1f64), ("Iron".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitAccessBridge".into(), + target_prefab_hash : 513258369i32, tier : MachineTier::TierOne, time + : 30f64, energy : 15000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Solder".into(), 2f64), + ("Steel".into(), 10f64)] .into_iter().collect() } ] .into_iter() .collect(), @@ -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,116 +23318,137 @@ 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 + .into_iter().collect() }, Recipe { target_prefab : + "ItemChocolateCerealBar".into(), target_prefab_hash : 860793245i32, + tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Cocoa".into(), 1f64), ("Flour" + .into(), 50f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPotatoBaked".into(), target_prefab_hash : - 2111886401i32, tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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 : + count_types : 1i64, reagents : vec![("Potato".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemBreadLoaf" + .into(), target_prefab_hash : 893514943i32, tier : + MachineTier::TierOne, time : 10f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 2i64, reagents : vec![("Cocoa".into(), 1f64), ("Flour" - .into(), 50f64)] .into_iter().collect() }), - ("ItemCookedCondensedMilk".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 : 1i64, reagents : vec![("Milk".into(), 100f64)] - .into_iter().collect() }), ("ItemCookedCorn".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + count_types : 2i64, reagents : vec![("Oil".into(), 5f64), ("Potato" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPumpkinPie".into(), target_prefab_hash : 62768076i32, tier : + MachineTier::TierOne, time : 10f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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 }, + count_types : 4i64, reagents : vec![("Egg".into(), 1f64), ("Flour" + .into(), 100f64), ("Milk".into(), 10f64), ("Pumpkin".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemCookedTomato" + .into(), target_prefab_hash : - 709086714i32, tier : + MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 1i64, reagents : vec![("Mushroom".into(), 1f64)] - .into_iter().collect() }), ("ItemCookedPowderedEggs".into(), Recipe { + 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![("Egg".into(), 4f64)] - .into_iter().collect() }), ("ItemCookedPumpkin".into(), Recipe { tier - : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + 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![("Pumpkin".into(), 1f64)] - .into_iter().collect() }), ("ItemCookedRice".into(), Recipe { tier : + 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() }), ("ItemCookedSoybean".into(), Recipe { tier + .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![("Soy".into(), 1f64)] - .into_iter().collect() }), ("ItemCookedTomato".into(), Recipe { tier + 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![("Tomato".into(), 1f64)] - .into_iter().collect() }), ("ItemFries".into(), Recipe { tier : + 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![("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 : + 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 : @@ -22969,22 +23456,16 @@ 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(), 50f64), ("Milk".into(), 5f64), ("Sugar".into(), 50f64)] - .into_iter().collect() }), ("ItemPotatoBaked".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : + .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 : 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() }) + 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,1056 +30709,1166 @@ 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 : + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 2f64), ("Iron".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitGrowLight".into(), + target_prefab_hash : 341030083i32, tier : MachineTier::TierOne, time + : 30f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, - reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 1f64), - ("Iron".into(), 5f64)] .into_iter().collect() }), - ("AppliancePackagingMachine".into(), Recipe { tier : - MachineTier::TierOne, time : 30f64, energy : 500f64, temperature : + reagents : vec![("Copper".into(), 5f64), ("Electrum".into(), 10f64), + ("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemBatteryCell".into(), target_prefab_hash : + 700133157i32, tier : MachineTier::TierOne, time : 10f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 2f64), ("Iron".into(), + 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemBatteryCellLarge".into(), target_prefab_hash : - 459827268i32, + tier : MachineTier::TierOne, time : 20f64, energy : 20000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 10f64), ("Gold".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "Battery_Wireless_cell" + .into(), target_prefab_hash : - 462415758i32, tier : + MachineTier::TierOne, time : 10f64, energy : 10000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 3i64, reagents : vec![("Copper".into(), 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 : + count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" + .into(), 2f64), ("Iron".into(), 2f64)] .into_iter().collect() }, + Recipe { target_prefab : "Battery_Wireless_cell_Big".into(), + target_prefab_hash : - 41519077i32, tier : MachineTier::TierOne, time + : 20f64, energy : 20000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, - reagents : vec![("Copper".into(), 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 : + reagents : vec![("Copper".into(), 15f64), ("Gold".into(), 5f64), + ("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitPowerTransmitter".into(), target_prefab_hash + : 291368213i32, tier : MachineTier::TierOne, time : 20f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 7f64), ("Gold".into(), 5f64), ("Steel".into(), + 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitPowerTransmitterOmni".into(), target_prefab_hash : - + 831211676i32, tier : MachineTier::TierOne, time : 20f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 8f64), ("Gold".into(), 4f64), ("Steel".into(), + 4f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemBatteryCellNuclear".into(), target_prefab_hash : 544617306i32, + tier : MachineTier::TierTwo, time : 180f64, energy : 360000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Astroloy".into(), + 10f64), ("Inconel".into(), 5f64), ("Steel".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemHEMDroidRepairKit".into(), target_prefab_hash : 470636008i32, + tier : MachineTier::TierTwo, time : 40f64, energy : 1500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), + 10f64), ("Inconel".into(), 5f64), ("Solder".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemBatteryCharger".into(), target_prefab_hash : - 1866880307i32, + tier : MachineTier::TierOne, time : 1f64, energy : 500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 5f64), ("Gold".into(), 5f64), ("Iron".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemBatteryChargerSmall" + .into(), target_prefab_hash : 1008295833i32, tier : + MachineTier::TierOne, time : 1f64, energy : 250f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" - .into(), 1f64), ("Iron".into(), 5f64)] .into_iter().collect() }), - ("ApplianceTabletDock".into(), Recipe { tier : MachineTier::TierOne, - time : 30f64, energy : 750f64, temperature : RecipeRange { start : + .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 : 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, + 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(), 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, + 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(), 15f64), ("Gold".into(), 5f64), ("Steel" - .into(), 5f64)] .into_iter().collect() }), ("CartridgeAtmosAnalyser" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + 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() }), ("CartridgeConfiguration".into(), - Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, + 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "CartridgeOreScanner".into(), target_prefab_hash : - 1768732546i32, + tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), 1f64)] .into_iter() - .collect() }), ("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 : + .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(), 5f64), ("Gold" - .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), - ("CartridgeOreScanner".into(), Recipe { tier : MachineTier::TierOne, + 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(), 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 : + 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() }), - ("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 : + .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() }), ("CircuitboardGraphDisplay".into(), - Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, + 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() }), - ("CircuitboardHashDisplay".into(), Recipe { tier : + 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 : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" - .into(), 5f64)] .into_iter().collect() }), ("CircuitboardModeControl" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + 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() }), ("CircuitboardPowerControl".into(), Recipe { tier : + .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() }), ("CircuitboardShipDisplay" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + .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() }), ("CircuitboardSolarControl".into(), Recipe { tier : + .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() }), ("DynamicLight".into(), - Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 500f64, + .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(), - 2f64), ("Iron".into(), 5f64)] .into_iter().collect() }), - ("ElectronicPrinterMod".into(), Recipe { tier : MachineTier::TierOne, - time : 180f64, energy : 72000f64, temperature : RecipeRange { start : + 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 : 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, + 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 : 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 }, + 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 : 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 : + 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 : 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 : + 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(), 2f64), ("Gold" - .into(), 2f64), ("Iron".into(), 5f64)] .into_iter().collect() }), - ("ItemCableAnalyser".into(), Recipe { tier : MachineTier::TierOne, - time : 5f64, energy : 100f64, temperature : RecipeRange { start : + 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(), 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(), 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 : 1i64, reagents : - vec![("Copper".into(), 0.5f64)] .into_iter().collect() }), - ("ItemCableCoilHeavy".into(), Recipe { tier : MachineTier::TierOne, - time : 5f64, energy : 500f64, temperature : RecipeRange { start : + .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(), 0.5f64), ("Gold".into(), 0.5f64)] - .into_iter().collect() }), ("ItemCableFuse".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : + 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(), 5f64), ("Iron" - .into(), 5f64)] .into_iter().collect() }), ("ItemCreditCard".into(), - Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 200f64, + 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), ("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 : + 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(), 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 }, + 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(), 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(), 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 : 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, + 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 : 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 }, + .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 : 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, + 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 : 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, + .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 : 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, + .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 : 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 : + .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 : 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, + 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(), 2f64)] .into_iter().collect() }), - ("ItemKitDynamicGenerator".into(), Recipe { tier : - MachineTier::TierOne, time : 120f64, energy : 5000f64, temperature : + ("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 : 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 }, + 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 : 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 : + 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 : 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 : + 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(), 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, + 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 : 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, + .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![("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 : + .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 : 1i64, reagents : vec![("Steel".into(), 3f64)] - .into_iter().collect() }), ("ItemKitLogicCircuit".into(), Recipe { - tier : MachineTier::TierOne, time : 40f64, energy : 2000f64, + 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![("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 : + .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), ("Gold".into(), 1f64)] .into_iter() - .collect() }), ("ItemKitLogicProcessor".into(), Recipe { tier : + 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(), 2f64), ("Gold" - .into(), 2f64)] .into_iter().collect() }), ("ItemKitLogicSwitch" - .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : + 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), ("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 : + 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 : 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() }), - ("ItemKitRoboticArm".into(), Recipe { tier : MachineTier::TierOne, - time : 150f64, energy : 10000f64, temperature : RecipeRange { start : + 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 : 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 : + 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 : 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, + 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 : 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 : + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Constantan".into(), 10f64), ("Copper".into(), 10f64), + ("Electrum".into(), 15f64), ("Steel".into(), 20f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitAdvancedComposter" + .into(), target_prefab_hash : - 1431998347i32, tier : + MachineTier::TierTwo, time : 55f64, energy : 20000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Iron" - .into(), 50f64)] .into_iter().collect() }), ("ItemKitSpeaker".into(), - Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, + count_types : 4i64, reagents : vec![("Copper".into(), 15f64), + ("Electrum".into(), 20f64), ("Solder".into(), 5f64), ("Steel".into(), + 30f64)] .into_iter().collect() }, Recipe { target_prefab : + "PortableComposter".into(), target_prefab_hash : - 1958705204i32, + tier : MachineTier::TierOne, time : 55f64, energy : 20000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() - .collect() }, count_types : 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, + .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 : 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 : + 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), ("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 : + 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 : 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 : + count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" + .into(), 1f64), ("Iron".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "ElectronicPrinterMod".into(), + target_prefab_hash : - 311170652i32, tier : MachineTier::TierOne, + time : 180f64, energy : 72000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), + 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() + .collect() }, Recipe { target_prefab : "AutolathePrinterMod".into(), + target_prefab_hash : 221058307i32, tier : MachineTier::TierTwo, time + : 180f64, energy : 72000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), + 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ToolPrinterMod".into(), + target_prefab_hash : 1700018136i32, tier : MachineTier::TierTwo, time + : 180f64, energy : 72000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), + 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() + .collect() }, Recipe { target_prefab : "PipeBenderMod".into(), + target_prefab_hash : 443947415i32, tier : MachineTier::TierTwo, time + : 180f64, energy : 72000f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), + 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitAdvancedFurnace" + .into(), target_prefab_hash : - 616758353i32, tier : + MachineTier::TierTwo, time : 180f64, energy : 36000f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 6i64, reagents : vec![("Copper".into(), 25f64), + ("Electrum".into(), 15f64), ("Gold".into(), 5f64), ("Silicon".into(), + 6f64), ("Solder".into(), 8f64), ("Steel".into(), 30f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ApplianceMicrowave".into(), + target_prefab_hash : - 1136173965i32, tier : MachineTier::TierOne, + time : 45f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, - reagents : vec![("Copper".into(), 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(), 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 : 3i64, reagents : + .into_iter().collect() }, count_types : 4i64, 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 : + 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(), 5f64), ("Gold".into(), 3f64), - ("Iron".into(), 10f64)] .into_iter().collect() }), - ("ItemResearchCapsule".into(), Recipe { tier : MachineTier::TierOne, - time : 3f64, energy : 400f64, temperature : RecipeRange { start : + 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 : 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, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Iron".into(), 2f64), ("Silicon".into(), 1f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ApplianceReagentProcessor".into(), target_prefab_hash : + 1260918085i32, tier : MachineTier::TierOne, time : 45f64, energy : + 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 2f64), ("Gold".into(), 1f64), ("Iron".into(), + 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ApplianceChemistryStation".into(), target_prefab_hash : + 1365789392i32, tier : MachineTier::TierOne, time : 45f64, energy : + 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 1f64), ("Steel".into(), + 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "AppliancePaintMixer".into(), target_prefab_hash : - 1339716113i32, + tier : MachineTier::TierOne, time : 45f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), - 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 : + 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 : 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 : + count_types : 5i64, reagents : vec![("Copper".into(), 15f64), + ("Electrum".into(), 50f64), ("Invar".into(), 25f64), ("Iron".into(), + 15f64), ("Steel".into(), 100f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitHorizontalAutoMiner".into(), + target_prefab_hash : 844391171i32, tier : MachineTier::TierTwo, time + : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 5i64, + reagents : vec![("Copper".into(), 7f64), ("Electrum".into(), 25f64), + ("Invar".into(), 15f64), ("Iron".into(), 8f64), ("Steel".into(), + 60f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemCreditCard".into(), target_prefab_hash : - 1756772618i32, tier : + MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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 : + 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(), 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, + 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![("Copper".into(), 2f64), ("Iron".into(), 1f64)] .into_iter() - .collect() }), ("MotherboardComms".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + 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 : 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, + 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 : 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() }) + .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,101 +34620,201 @@ 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 : + reagents : vec![] .into_iter().collect() }, count_types : 4i64, + reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 20f64), + ("Silicon".into(), 5f64), ("Steel".into(), 15f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitDynamicLiquidCanister" + .into(), target_prefab_hash : 375541286i32, tier : + MachineTier::TierOne, time : 20f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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 : + count_types : 1i64, reagents : vec![("Iron".into(), 20f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitDynamicMKIILiquidCanister".into(), target_prefab_hash : - + 638019974i32, tier : MachineTier::TierTwo, time : 40f64, energy : + 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 5f64), ("Iron".into(), 20f64), ("Silicon" + .into(), 5f64), ("Steel".into(), 15f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemActiveVent".into(), target_prefab_hash + : - 842048328i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 1f64), ("Iron".into(), + 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemGasCanisterEmpty".into(), target_prefab_hash : 42280099i32, tier + : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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, + 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(), - 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 : + 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![("Constantan".into(), 1f64), - ("Iron".into(), 5f64), ("Silver".into(), 5f64)] .into_iter() - .collect() }), ("ItemGasFilterNitrogen".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + 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 : 1i64, reagents : vec![("Iron".into(), 5f64)] - .into_iter().collect() }), ("ItemGasFilterNitrogenL".into(), Recipe { - tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, + 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![("Invar".into(), - 1f64), ("Steel".into(), 5f64), ("Stellite".into(), 1f64)] - .into_iter().collect() }), ("ItemGasFilterNitrogenM".into(), Recipe { + .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, @@ -33955,23 +34822,26 @@ 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(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] - .into_iter().collect() }), ("ItemGasFilterNitrousOxide".into(), - Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + .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 : 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, + .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![("Invar".into(), 1f64), ("Steel".into(), 5f64), ("Stellite" - .into(), 1f64)] .into_iter().collect() }), - ("ItemGasFilterNitrousOxideM".into(), Recipe { tier : + 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 : @@ -33979,14 +34849,34 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< 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 : + .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 : 1i64, reagents : vec![("Iron".into(), 5f64)] - .into_iter().collect() }), ("ItemGasFilterOxygenL".into(), Recipe { + 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, @@ -33994,654 +34884,613 @@ pub fn build_prefab_database() -> std::collections::BTreeMap< : 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, + .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() }), ("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, + .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() }), ("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, + .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() }), ("ItemGasFilterWaterL".into(), - Recipe { tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, + 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 : 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, + .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![("Constantan" - .into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] - .into_iter().collect() }), ("ItemHydroponicTray".into(), Recipe { - tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + .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 : 1i64, reagents : vec![("Iron".into(), - 10f64)] .into_iter().collect() }), ("ItemKitAirlock".into(), Recipe { - tier : MachineTier::TierOne, time : 50f64, energy : 5000f64, + .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 : 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 : + .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(), 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 : + 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(), 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, + 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 : 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, + .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 : 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, + .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 : 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 : + .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 : 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, + 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 : 3i64, reagents : - vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), - 3f64)] .into_iter().collect() }), ("ItemKitInsulatedLiquidPipe" - .into(), Recipe { tier : MachineTier::TierOne, time : 4f64, energy : + .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![("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 : + 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![("Copper".into(), 10f64), - ("Invar".into(), 10f64), ("Steel".into(), 10f64)] .into_iter() - .collect() }), ("ItemKitLiquidRegulator".into(), Recipe { tier : + 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 : 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 : + 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 : 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 : + 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 : 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 : + 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![("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 : + 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() }), ("ItemKitPipeUtility" - .into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : + .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 : 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() }), - ("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 : + .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![("Constantan".into(), 2f64), ("Electrum".into(), 2f64), ("Iron" - .into(), 3f64)] .into_iter().collect() }), ("ItemKitSuitStorage" - .into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : + 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), ("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 : + 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 : 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 : + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Invar".into(), 10f64), ("Steel".into(), 10f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLargeDirectHeatExchanger".into(), target_prefab_hash : + 450164077i32, tier : MachineTier::TierTwo, time : 30f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Invar".into(), 10f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : + "ItemKitPassthroughHeatExchanger".into(), target_prefab_hash : + 636112787i32, tier : MachineTier::TierTwo, time : 30f64, energy : + 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Invar".into(), 10f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : + "ItemKitSmallDirectHeatExchanger".into(), target_prefab_hash : - + 1332682164i32, tier : MachineTier::TierOne, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 5f64), ("Steel".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitEvaporationChamber" + .into(), target_prefab_hash : 1587787610i32, tier : + MachineTier::TierOne, time : 30f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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 : + count_types : 3i64, reagents : vec![("Copper".into(), 10f64), + ("Silicon".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemKitPipeRadiatorLiquid" + .into(), target_prefab_hash : - 1697302609i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 3i64, reagents : vec![("Copper".into(), 20f64), ("Gold" - .into(), 5f64), ("Iron".into(), 10f64)] .into_iter().collect() }), - ("ItemLiquidCanisterEmpty".into(), Recipe { tier : + count_types : 2i64, reagents : vec![("Gold".into(), 3f64), ("Steel" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemPipeValve".into(), target_prefab_hash : 799323450i32, tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] - .into_iter().collect() }), ("ItemLiquidCanisterSmart".into(), Recipe - { tier : MachineTier::TierTwo, time : 10f64, energy : 1000f64, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemLiquidPipeValve".into(), target_prefab_hash : - 2126113312i32, + tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() - .collect() }, count_types : 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 : + .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 { + vec![("Copper".into(), 3f64), ("Gold".into(), 1f64), ("Iron".into(), + 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemWaterWallCooler".into(), target_prefab_hash : - 1721846327i32, tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), - 3f64), ("Gold".into(), 3f64), ("Iron".into(), 5f64)] .into_iter() - .collect() }), ("ItemPipeIgniter".into(), Recipe { tier : - MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + 3f64), ("Gold".into(), 1f64), ("Iron".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemWallHeater".into(), + target_prefab_hash : 1880134612i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 1f64), + ("Iron".into(), 3f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitSleeper".into(), target_prefab_hash : + 326752036i32, tier : MachineTier::TierOne, time : 60f64, energy : + 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 10f64), ("Gold".into(), 10f64), ("Steel" + .into(), 25f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitCryoTube".into(), target_prefab_hash : - 545234195i32, tier : + MachineTier::TierTwo, time : 120f64, energy : 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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, + 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 : 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 : + .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 : 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, + 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 : 2i64, reagents : vec![("Iron" - .into(), 2f64), ("Silicon".into(), 4f64)] .into_iter().collect() }), - ("ItemWaterPipeDigitalValve".into(), Recipe { tier : - MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : + .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(), 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() }) + 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 : - 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, + 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(), 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, + 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 : 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, + .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 : 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 : + .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![("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, + count_types : 2i64, reagents : vec![("Gold".into(), 5f64), ("Steel" + .into(), 5f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitLiquidUmbilical".into(), target_prefab_hash : 1571996765i32, + tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 5f64), ("Steel".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitGasUmbilical".into(), target_prefab_hash : - + 1867280568i32, tier : MachineTier::TierOne, time : 5f64, energy : + 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] - .into_iter().collect() }, count_types : 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 : + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 3f64), + ("Steel".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemKitStairwell".into(), target_prefab_hash : - + 1868555784i32, tier : MachineTier::TierOne, time : 20f64, energy : + 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 15f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemKitRocketScanner".into(), target_prefab_hash : 1753647154i32, + tier : MachineTier::TierOne, time : 60f64, energy : 60000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), + 10f64), ("Gold".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemRocketScanningHead".into(), target_prefab_hash : + - 1198702771i32, tier : MachineTier::TierOne, time : 60f64, energy : + 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 3f64), ("Gold".into(), 2f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemRocketMiningDrillHead" + .into(), target_prefab_hash : 2109945337i32, tier : MachineTier::TierOne, time : 30f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 20f64)] - .into_iter().collect() }), ("ItemRocketMiningDrillHeadDurable" - .into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : + .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() }), - ("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, + .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![("Copper".into(), 3f64), ("Gold".into(), 2f64)] .into_iter() - .collect() }) + 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 : - RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, - pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : - false }, required_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 : + .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 : 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, + count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" + .into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "AccessCardYellow".into(), + target_prefab_hash : 568932536i32, tier : MachineTier::TierOne, time + : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, - reagents : vec![("Copper".into(), 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::TierTwo, time : 10f64, energy : 500f64, + 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 : 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 : + .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 : 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 : + count_types : 3i64, reagents : vec![("Copper".into(), 30f64), ("Lead" + .into(), 50f64), ("Steel".into(), 30f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemGrenade".into(), target_prefab_hash : + 1544275894i32, tier : MachineTier::TierOne, time : 90f64, energy : + 2900f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 4i64, reagents : + vec![("Copper".into(), 15f64), ("Gold".into(), 1f64), ("Lead".into(), + 25f64), ("Steel".into(), 25f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemExplosive".into(), target_prefab_hash : + 235361649i32, tier : MachineTier::TierTwo, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Electrum".into(), 1f64), ("Silicon".into(), 3f64), ("Solder" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemMiningCharge".into(), target_prefab_hash : 15829510i32, tier : + MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Gold".into(), 1f64), ("Iron" - .into(), 1f64), ("Silicon".into(), 3f64)] .into_iter().collect() }), - ("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,453 +50683,369 @@ 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, - stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : - 0f64, stop : 1000000f64, is_valid : 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 : + 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![("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 : "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![("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 : + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanBrown".into(), + target_prefab_hash : 845176977i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, - reagents : vec![("Silicon".into(), 1f64)] .into_iter().collect() }), - ("ItemChemLightWhite".into(), Recipe { tier : MachineTier::TierOne, - time : 1f64, energy : 500f64, temperature : RecipeRange { start : + 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() }), - ("ItemChemLightYellow".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() }), - ("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 : + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanKhaki".into(), + target_prefab_hash : 1918456047i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanOrange".into(), + target_prefab_hash : - 158007629i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanPink".into(), + target_prefab_hash : 1344257263i32, tier : MachineTier::TierOne, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanPurple".into(), + target_prefab_hash : 30686509i32, tier : MachineTier::TierOne, time : + 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop + : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemSprayCanRed".into(), target_prefab_hash + : 1514393921i32, tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] - .into_iter().collect() }, count_types : 1i64, reagents : - vec![("Silicon".into(), 25f64)] .into_iter().collect() }), - ("ItemClothingBagOveralls_Ukraine".into(), Recipe { tier : + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 1f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemSprayCanWhite".into(), target_prefab_hash : 498481505i32, tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] - .into_iter().collect() }), ("ItemCrowbar".into(), Recipe { tier : - MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + 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(), 5f64)] - .into_iter().collect() }), ("ItemDirtCanister".into(), Recipe { tier - : MachineTier::TierOne, time : 5f64, energy : 400f64, temperature : + 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 : 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 : + count_types : 2i64, reagents : vec![("Electrum".into(), 5f64), + ("Iron".into(), 5f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemMKIIWrench".into(), target_prefab_hash : + 1862001680i32, tier : MachineTier::TierTwo, time : 10f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Electrum".into(), 3f64), ("Iron".into(), 3f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemMKIIDuctTape".into(), + target_prefab_hash : 388774906i32, tier : MachineTier::TierTwo, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Electrum".into(), 1f64), ("Iron".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemMKIIDrill" + .into(), target_prefab_hash : 324791548i32, tier : + MachineTier::TierTwo, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" - .into(), 5f64)] .into_iter().collect() }), ("ItemDuctTape".into(), - Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + count_types : 3i64, reagents : vec![("Copper".into(), 5f64), + ("Electrum".into(), 5f64), ("Iron".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemMKIIScrewdriver".into(), + target_prefab_hash : - 2015613246i32, tier : MachineTier::TierTwo, + time : 10f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Electrum".into(), 2f64), ("Iron".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : + "ItemMKIIArcWelder".into(), target_prefab_hash : - 2061979347i32, + tier : MachineTier::TierTwo, time : 30f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() - .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), - 2f64)] .into_iter().collect() }), ("ItemEvaSuit".into(), Recipe { - tier : MachineTier::TierOne, time : 5f64, energy : 500f64, + .collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), + 14f64), ("Invar".into(), 5f64), ("Solder".into(), 10f64), ("Steel" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemMKIIAngleGrinder".into(), target_prefab_hash : 240174650i32, + tier : MachineTier::TierTwo, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() - .collect() }, count_types : 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, + .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![("Electrum".into(), 1f64), ("Silicon".into(), 7f64), - ("Solder".into(), 2f64)] .into_iter().collect() }), ("ItemFlagSmall" - .into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : + reagents : vec![("Invar".into(), 5f64), ("Silicon".into(), 10f64), + ("Steel".into(), 10f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemCrowbar".into(), target_prefab_hash : + 856108234i32, tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" - .into(), 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 : + .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![("Astroloy".into(), 5f64), - ("Steel".into(), 15f64), ("Stellite".into(), 5f64)] .into_iter() - .collect() }), ("ItemHardJetpack".into(), Recipe { tier : - MachineTier::TierTwo, time : 40f64, energy : 1750f64, 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 : 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 : + 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 : 2i64, reagents : - vec![("Invar".into(), 1f64), ("Steel".into(), 6f64)] .into_iter() - .collect() }), ("ItemHardSuit".into(), Recipe { tier : - MachineTier::TierTwo, time : 60f64, energy : 3000f64, temperature : + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 5f64), ("Gold".into(), 2f64), ("Iron".into(), + 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemBeacon".into(), target_prefab_hash : - 869869491i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 3i64, reagents : vec![("Astroloy".into(), 10f64), - ("Steel".into(), 20f64), ("Stellite".into(), 2f64)] .into_iter() - .collect() }), ("ItemHardsuitHelmet".into(), Recipe { tier : - MachineTier::TierTwo, time : 50f64, energy : 1750f64, temperature : + 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 : 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 : + 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 : 1i64, reagents : vec![("Copper".into(), 3f64)] - .into_iter().collect() }), ("ItemJetpackBasic".into(), Recipe { tier - : MachineTier::TierOne, time : 30f64, energy : 1500f64, temperature : + 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 : 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 : + 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 : 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 : + count_types : 1i64, reagents : vec![("Iron".into(), 2f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemArcWelder" + .into(), target_prefab_hash : 1385062886i32, tier : + MachineTier::TierOne, time : 30f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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 : + count_types : 4i64, reagents : vec![("Electrum".into(), 10f64), + ("Invar".into(), 5f64), ("Solder".into(), 10f64), ("Steel".into(), + 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemWeldingTorch".into(), target_prefab_hash : - 2066892079i32, tier + : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 2i64, reagents : vec![("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, + count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemAngleGrinder".into(), target_prefab_hash : 201215010i32, tier : + MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemTerrainManipulator".into(), target_prefab_hash : 111280987i32, + tier : MachineTier::TierOne, time : 15f64, energy : 600f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() - .collect() }, count_types : 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, + .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), + 3f64), ("Gold".into(), 2f64), ("Iron".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemDirtCanister".into(), + target_prefab_hash : 902565329i32, tier : MachineTier::TierOne, time + : 5f64, energy : 400f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, - reagents : vec![] .into_iter().collect() }, count_types : 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 : + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemWireCutters".into(), target_prefab_hash + : 1535854074i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemLabeller".into(), target_prefab_hash : - 743968726i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 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 : + count_types : 2i64, reagents : vec![("Gold".into(), 1f64), ("Iron" + .into(), 2f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemRemoteDetonator".into(), target_prefab_hash : 678483886i32, tier + : MachineTier::TierTwo, time : 30f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 3i64, reagents : vec![("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, + 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 : 2i64, - reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 3f64)] - .into_iter().collect() }), ("ItemMiningDrillHeavy".into(), Recipe { + reagents : vec![] .into_iter().collect() }, count_types : 3i64, + reagents : vec![("Electrum".into(), 1f64), ("Silicon".into(), 7f64), + ("Solder".into(), 2f64)] .into_iter().collect() }, Recipe { + target_prefab : "ItemMiningCharge".into(), target_prefab_hash : + 15829510i32, tier : MachineTier::TierOne, time : 60f64, energy : + 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : vec![("Gold" + .into(), 1f64), ("Iron".into(), 1f64), ("Silicon".into(), 5f64)] + .into_iter().collect() }, Recipe { target_prefab : "ItemMiningDrill" + .into(), target_prefab_hash : 1055173191i32, tier : + MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, + pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : + false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, + is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, + count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" + .into(), 3f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemMiningDrillPneumatic".into(), target_prefab_hash : + 1258187304i32, tier : MachineTier::TierOne, time : 20f64, energy : + 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 3i64, reagents : + vec![("Copper".into(), 4f64), ("Solder".into(), 4f64), ("Steel" + .into(), 6f64)] .into_iter().collect() }, Recipe { target_prefab : + "ItemMiningDrillHeavy".into(), target_prefab_hash : - 1663349918i32, tier : MachineTier::TierTwo, time : 30f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, @@ -49754,305 +51053,472 @@ 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(), 5f64), ("Invar".into(), 10f64), ("Solder".into(), 10f64), ("Steel" - .into(), 10f64)] .into_iter().collect() }), - ("ItemMiningDrillPneumatic".into(), Recipe { tier : - MachineTier::TierOne, time : 20f64, energy : 2000f64, temperature : + .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 : 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 : + 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), - ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemNVG".into(), - Recipe { tier : MachineTier::TierOne, time : 45f64, energy : 2750f64, + ("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 : 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 : 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(), 5f64), ("Iron".into(), 5f64)] .into_iter() - .collect() }), ("ItemRemoteDetonator".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![("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, - 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 : + 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 : 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 }, + count_types : 3i64, reagents : vec![("Gold".into(), 2f64), ("Lead" + .into(), 5f64), ("Steel".into(), 10f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemEvaSuit".into(), target_prefab_hash : + 1677018918i32, tier : MachineTier::TierOne, time : 5f64, energy : + 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + is_valid : false }, pressure : RecipeRange { start : 0f64, stop : + 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : + 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] + .into_iter().collect() }, count_types : 2i64, reagents : + vec![("Copper".into(), 2f64), ("Iron".into(), 5f64)] .into_iter() + .collect() }, Recipe { target_prefab : "ItemToolBelt".into(), + target_prefab_hash : - 355127880i32, tier : MachineTier::TierOne, + time : 5f64, energy : 500f64, temperature : RecipeRange { start : + 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { + start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 1i64, + reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }, + Recipe { target_prefab : "ItemMkIIToolbelt".into(), + target_prefab_hash : 1467558064i32, tier : MachineTier::TierTwo, time + : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, + stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : + 0f64, stop : 1000000f64, is_valid : false }, required_mix : + RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, + reagents : vec![] .into_iter().collect() }, count_types : 2i64, + reagents : vec![("Constantan".into(), 5f64), ("Iron".into(), 3f64)] + .into_iter().collect() }, Recipe { target_prefab : + "WeaponPistolEnergy".into(), target_prefab_hash : - 385323479i32, + tier : MachineTier::TierTwo, time : 120f64, energy : 3000f64, + temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : + false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, + is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any + : true, is_any_to_remove : false, reagents : vec![] .into_iter() + .collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), + 20f64), ("Gold".into(), 10f64), ("Solder".into(), 10f64), ("Steel" + .into(), 10f64)] .into_iter().collect() }, Recipe { target_prefab : + "WeaponRifleEnergy".into(), target_prefab_hash : 1154745374i32, tier + : MachineTier::TierTwo, time : 240f64, energy : 10000f64, temperature + : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, - count_types : 1i64, reagents : vec![("Iron".into(), 2f64)] - .into_iter().collect() }), ("ItemSensorLenses".into(), Recipe { tier - : MachineTier::TierTwo, time : 45f64, energy : 3500f64, temperature : + 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 : 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, + 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 : 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 : + .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 : 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, + 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 : 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, + .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 : 2i64, - reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64)] - .into_iter().collect() }), ("ItemSpacepack".into(), Recipe { tier : + 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 : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" - .into(), 5f64)] .into_iter().collect() }), ("ItemSprayCanBlack" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + 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![("Iron" - .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanBlue" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + .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() }), ("ItemSprayCanBrown" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + .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![("Iron" - .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanGreen" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + .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![("Iron" - .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanGrey" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + .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![("Iron" - .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanKhaki" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + .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![("Iron" - .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanOrange" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + .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![("Iron" - .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanPink" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : + .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![("Iron" - .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanPurple" - .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : - 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, + .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 : 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, + .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![("Copper".into(), - 3f64), ("Gold".into(), 2f64), ("Iron".into(), 5f64)] .into_iter() - .collect() }), ("ItemToolBelt".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + .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 : 1i64, reagents : vec![("Iron".into(), 3f64)] - .into_iter().collect() }), ("ItemWearLamp".into(), Recipe { tier : - MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : + 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 : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold" - .into(), 2f64)] .into_iter().collect() }), ("ItemWeldingTorch" - .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : + 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 : 2i64, reagents : - vec![("Copper".into(), 1f64), ("Iron".into(), 3f64)] .into_iter() - .collect() }), ("ItemWireCutters".into(), Recipe { tier : - MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : + .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![("Iron".into(), 3f64)] - .into_iter().collect() }), ("ItemWrench".into(), Recipe { tier : - MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : + 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 : 1i64, reagents : vec![("Iron".into(), 3f64)] - .into_iter().collect() }), ("ToyLuna".into(), Recipe { tier : + 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![("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() }) + 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, }