// ================================================= // !! <-----> DO NOT MODIFY <-----> !! // // This module was automatically generated by an // xtask // // run // // `cargo xtask generate -m database` // // from the workspace to regenerate // // ================================================= use crate::enums::script::*; use crate::enums::basic::*; use crate::enums::{MemoryAccess, ConnectionType, ConnectionRole, MachineTier}; use crate::templates::*; pub fn build_prefab_database() -> std::collections::BTreeMap< i32, crate::templates::ObjectTemplate, > { #[allow(clippy::unreadable_literal)] let mut map: std::collections::BTreeMap = std::collections::BTreeMap::new(); map.insert( -1330388999i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardBlack".into(), prefab_hash: -1330388999i32, desc: "".into(), name: "Access Card (Black)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1411327657i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardBlue".into(), prefab_hash: -1411327657i32, desc: "".into(), name: "Access Card (Blue)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1412428165i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardBrown".into(), prefab_hash: 1412428165i32, desc: "".into(), name: "Access Card (Brown)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1339479035i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardGray".into(), prefab_hash: -1339479035i32, desc: "".into(), name: "Access Card (Gray)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -374567952i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardGreen".into(), prefab_hash: -374567952i32, desc: "".into(), name: "Access Card (Green)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 337035771i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardKhaki".into(), prefab_hash: 337035771i32, desc: "".into(), name: "Access Card (Khaki)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -332896929i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardOrange".into(), prefab_hash: -332896929i32, desc: "".into(), name: "Access Card (Orange)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 431317557i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardPink".into(), prefab_hash: 431317557i32, desc: "".into(), name: "Access Card (Pink)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 459843265i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardPurple".into(), prefab_hash: 459843265i32, desc: "".into(), name: "Access Card (Purple)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1713748313i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardRed".into(), prefab_hash: -1713748313i32, desc: "".into(), name: "Access Card (Red)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2079959157i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardWhite".into(), prefab_hash: 2079959157i32, desc: "".into(), name: "Access Card (White)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 568932536i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AccessCardYellow".into(), prefab_hash: 568932536i32, desc: "".into(), name: "Access Card (Yellow)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::AccessCard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1365789392i32, ItemConsumerTemplate { templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "ApplianceChemistryStation".into(), prefab_hash: 1365789392i32, desc: "".into(), name: "Chemistry Station".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Output".into(), typ : Class::None }] .into_iter() .collect(), consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemCharcoal".into(), "ItemCobaltOre".into(), "ItemFern".into(), "ItemSilverIngot".into(), "ItemSilverOre".into(), "ItemSoyOil".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, } .into(), ); map.insert( -1683849799i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ApplianceDeskLampLeft".into(), prefab_hash: -1683849799i32, desc: "".into(), name: "Appliance Desk Lamp Left".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1174360780i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ApplianceDeskLampRight".into(), prefab_hash: 1174360780i32, desc: "".into(), name: "Appliance Desk Lamp Right".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1136173965i32, ItemConsumerTemplate { templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "ApplianceMicrowave".into(), prefab_hash: -1136173965i32, desc: "While countless \'better\' ways of cooking Food have been invented in the last few hundred years, few are as durable or easy to fabricate as the OK-Zoomer microwave. Licensed from Xigo, the plans are based on a classic model from the mid-21st century, giving it a charmingly retro feel. But don\'t worry, it oscillates Water molecules more than adequately. \nJust bolt it to a Powered Bench using a Wrench to power it, follow the recipe, and you\'re cooking." .into(), name: "Microwave".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Output".into(), typ : Class::None }] .into_iter() .collect(), consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemCorn".into(), "ItemEgg".into(), "ItemFertilizedEgg".into(), "ItemFlour".into(), "ItemMilk".into(), "ItemMushroom".into(), "ItemPotato".into(), "ItemPumpkin".into(), "ItemRice".into(), "ItemSoybean".into(), "ItemSoyOil".into(), "ItemTomato".into(), "ItemSugarCane".into(), "ItemCocoaTree".into(), "ItemCocoaPowder" .into(), "ItemSugar".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, } .into(), ); map.insert( -749191906i32, ItemConsumerTemplate { templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "AppliancePackagingMachine".into(), prefab_hash: -749191906i32, desc: "The Xigo Cannifier requires Empty Can and cooked food to create long-lasting, easily stored sustenance. Note that the Cannifier must be bolted to a Powered Bench for power, and only accepts cooked food and tin cans.\n\nOPERATION\n\n1. Add the correct ingredients to the device via the hopper in the TOP.\n\n2. Close the device using the dropdown handle.\n\n3. Activate the device.\n\n4. Remove canned goods from the outlet in the FRONT.\n\nNote: the Cannifier will flash an error on its activation switch if you attempt to activate it before closing it.\n\n\n " .into(), name: "Basic Packaging Machine".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Export".into(), typ : Class::None }] .into_iter() .collect(), consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemCookedCondensedMilk".into(), "ItemCookedCorn".into(), "ItemCookedMushroom".into(), "ItemCookedPowderedEggs".into(), "ItemCookedPumpkin".into(), "ItemCookedRice".into(), "ItemCookedSoybean".into(), "ItemCookedTomato".into(), "ItemEmptyCan" .into(), "ItemMilk".into(), "ItemPotatoBaked".into(), "ItemSoyOil" .into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, } .into(), ); map.insert( -1339716113i32, ItemConsumerTemplate { templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "AppliancePaintMixer".into(), prefab_hash: -1339716113i32, desc: "".into(), name: "Paint Mixer".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Output".into(), typ : Class::Bottle }] .into_iter() .collect(), consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemSoyOil".into(), "ReagentColorBlue".into(), "ReagentColorGreen" .into(), "ReagentColorOrange".into(), "ReagentColorRed".into(), "ReagentColorYellow".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, } .into(), ); map.insert( -1303038067i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "AppliancePlantGeneticAnalyzer".into(), prefab_hash: -1303038067i32, desc: "The Genetic Analyzer can be used to process samples from the Plant Sampler. Once processed, the genetic information of the sampled plant can be viewed by clicking on the search button.\n\nIndividual Gene Value Widgets: \nMost gene values will appear as a sliding bar between a minimum value on the left and a maximum value on the right. The actual value of the gene is in the middle of the bar, in orange.\n\nMultiple Gene Value Widgets: \nFor temperature and pressure ranges, four genes appear on the same widget. The orange values underneath the bar are the minimum and maximum thresholds for growth. Outside of this range, the plant will stop growing and eventually die. The blue values underneath the bar are the minimum and maximum thresholds for ideal growth. Inside of this range, the plant will grow at maximum speed. The white values above the bar are the minimum and maximum achievable values for the growth threshold." .into(), name: "Plant Genetic Analyzer".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Input".into(), typ : Class::Tool }] .into_iter() .collect(), } .into(), ); map.insert( -1094868323i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "AppliancePlantGeneticSplicer".into(), prefab_hash: -1094868323i32, desc: "The Genetic Splicer can be used to copy a single gene from one \'source\' plant to another \'target\' plant of the same type. After copying, the source plant will be destroyed.\n \nTo begin splicing, place a plant or seed bag in the left slot (source) and place another plant or seed bag of the same type in the right slot (target). You can select a gene using the arrow buttons. Close the sliding door and press the green activate button. Once splicing has begun, the device will be locked until the process has finished (which will take approximately twenty minutes). If you want to cancel splicing you can power off the bench or detach the appliance as a last resort." .into(), name: "Plant Genetic Splicer".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Source Plant".into(), typ : Class::Plant }, SlotInfo { name : "Target Plant".into(), typ : Class::Plant } ] .into_iter() .collect(), } .into(), ); map.insert( 871432335i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "AppliancePlantGeneticStabilizer".into(), prefab_hash: 871432335i32, desc: "The Genetic Stabilizer can be used to manipulate gene stability on a specific Plants or Seeds. It has two modes Stabilize and Destabilize.\nStabilize: Increases all genes stability by 50%.\nDestabilize: Decreases all gene stability by 10% other than a chosen gene which will received decreased stability by 50%.\n " .into(), name: "Plant Genetic Stabilizer".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Plant".into(), typ : Class::Plant }] .into_iter() .collect(), } .into(), ); map.insert( 1260918085i32, ItemConsumerTemplate { templateType: "ItemConsumer".into(), prefab: PrefabInfo { prefab_name: "ApplianceReagentProcessor".into(), prefab_hash: 1260918085i32, desc: "Sitting somewhere between a high powered juicer and an alchemist\'s alembic, the Xigo reagent processor turns certain raw materials and food items into cooking and crafting ingredients. Indispensible in any space kitchen, just bolt it to the bench, and you\'re ready to go." .into(), name: "Reagent Processor".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Input".into(), typ : Class::None }, SlotInfo { name : "Output".into(), typ : Class::None } ] .into_iter() .collect(), consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemWheat".into(), "ItemSugarCane".into(), "ItemCocoaTree".into(), "ItemSoybean".into(), "ItemFlowerBlue".into(), "ItemFlowerGreen" .into(), "ItemFlowerOrange".into(), "ItemFlowerRed".into(), "ItemFlowerYellow".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, } .into(), ); map.insert( 142831994i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ApplianceSeedTray".into(), prefab_hash: 142831994i32, desc: "The seed tray can hold up to twelve plants or seeds and can be used to facilitate fast experimentation and testing of plant genetics." .into(), name: "Appliance Seed Tray".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant } ] .into_iter() .collect(), } .into(), ); map.insert( 1853941363i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ApplianceTabletDock".into(), prefab_hash: 1853941363i32, desc: "".into(), name: "Tablet Dock".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Appliance, sorting_class: SortingClass::Appliances, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "".into(), typ : Class::Tool }] .into_iter() .collect(), } .into(), ); map.insert( 221058307i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "AutolathePrinterMod".into(), prefab_hash: 221058307i32, desc: "Apply to an Autolathe with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options." .into(), name: "Autolathe Printer Mod".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -462415758i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "Battery_Wireless_cell".into(), prefab_hash: -462415758i32, desc: "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full" .into(), name: "Battery Wireless Cell".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Battery, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), (5u32, "High".into()), (6u32, "Full".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( -41519077i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "Battery_Wireless_cell_Big".into(), prefab_hash: -41519077i32, desc: "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full" .into(), name: "Battery Wireless Cell (Big)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Battery, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), (5u32, "High".into()), (6u32, "Full".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( -1976947556i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "CardboardBox".into(), prefab_hash: -1976947556i32, desc: "".into(), name: "Cardboard Box".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Storage, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( -1634532552i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeAccessController".into(), prefab_hash: -1634532552i32, desc: "".into(), name: "Cartridge (Access Controller)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1550278665i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeAtmosAnalyser".into(), prefab_hash: -1550278665i32, desc: "The Lorenz atmos analyzer is a multi-functional mass-spectrometer designed by ExMin for use with the OreCore Handheld Tablet. It displays the pressure, concentration and molar quantity of gas in rooms, tanks, or pipe networks." .into(), name: "Atmos Analyzer".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -932136011i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeConfiguration".into(), prefab_hash: -932136011i32, desc: "".into(), name: "Configuration".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1462180176i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeElectronicReader".into(), prefab_hash: -1462180176i32, desc: "".into(), name: "eReader".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1957063345i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeGPS".into(), prefab_hash: -1957063345i32, desc: "".into(), name: "GPS".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 872720793i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeGuide".into(), prefab_hash: 872720793i32, desc: "".into(), name: "Guide".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1116110181i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeMedicalAnalyser".into(), prefab_hash: -1116110181i32, desc: "When added to the OreCore Handheld Tablet, Asura\'s\'s ReadyMed medical analyzer reveals the health, or otherwise, of users various organs. Due to a design flaw, older models were notorious for producing quasar-like levels of x-ray radiation. Recent advances in shielding have more than halved the risk to users." .into(), name: "Medical Analyzer".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1606989119i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeNetworkAnalyser".into(), prefab_hash: 1606989119i32, desc: "A minor masterpiece of micro-electronic engineering, the network analyzer displays the current, voltage and wattage of a cable network, as well as any devices connected to it. Based on a widely-copied Sinotai design, it\'s used in conjunction with the OreCore Handheld Tablet." .into(), name: "Network Analyzer".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1768732546i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeOreScanner".into(), prefab_hash: -1768732546i32, desc: "When inserted into a Handheld Tablet the scanner will display minerals hidden underground on the tablet." .into(), name: "Ore Scanner".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1738236580i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeOreScannerColor".into(), prefab_hash: 1738236580i32, desc: "When inserted into a Handheld Tablet the scanner will display minerals hidden underground in different colors on the tablet." .into(), name: "Ore Scanner (Color)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1101328282i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgePlantAnalyser".into(), prefab_hash: 1101328282i32, desc: "".into(), name: "Cartridge Plant Analyser".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 81488783i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CartridgeTracker".into(), prefab_hash: 81488783i32, desc: "".into(), name: "Tracker".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Cartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1633663176i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardAdvAirlockControl".into(), prefab_hash: 1633663176i32, desc: "".into(), name: "Advanced Airlock".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1618019559i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardAirControl".into(), prefab_hash: 1618019559i32, desc: "When added to a Console, air control circuit boards allow you to program an Active Vent. As with small dogs and 83% of people, air control circuits have only three modes: Pressure, Draft and Offline. Pressure mode maintains a 100kPa atmosphere, switching the active vent between inward and outward flow until target pressure is achieved. Draft mode allows you to pair active vents to circulate air. Offline mode deactivates the vent. " .into(), name: "Air Control".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 912176135i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardAirlockControl".into(), prefab_hash: 912176135i32, desc: "Rumored to have been first sketched on a Norsec toilet wall by a disgruntled engineer, the Exgress airlock control circuit board\u{2019}s versatility and ease of fabrication has made it the Stationeers control system of choice for Airlock cycling protocols. \n\nTo enter setup mode, insert the board into a Console along with a data disk. In this mode, you can see all data-accessible objects currently connected to the Console. Doors, lights, gas sensors and slave consoles can be selected (highlighted green), and will be controlled once the data disk is removed." .into(), name: "Airlock".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -412104504i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardCameraDisplay".into(), prefab_hash: -412104504i32, desc: "Surveillance is sometimes necessary when building bases in highly hostile environments. The camera display circuit board allows wary Stationeers to turn a Console into a security display when connected to a Camera." .into(), name: "Camera Display".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 855694771i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardDoorControl".into(), prefab_hash: 855694771i32, desc: "A basic tool of Stationeer base construction, this circuit board provides a way to open and close a Composite Door, Blast Door or Glass Door remotely, when connected to a Console. This system can be further linked to Motion Sensor to create automatic doors." .into(), name: "Door Control".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -82343730i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardGasDisplay".into(), prefab_hash: -82343730i32, desc: "Information is power. Place this circuitboard into a Console to create a display that shows gas pressure or temperature of any connected tank, storage cannister, Kit (Pipe Analyzer) or Kit (Gas Sensor)." .into(), name: "Gas Display".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1344368806i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardGraphDisplay".into(), prefab_hash: 1344368806i32, desc: "".into(), name: "Graph Display".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1633074601i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardHashDisplay".into(), prefab_hash: 1633074601i32, desc: "".into(), name: "Hash Display".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1134148135i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardModeControl".into(), prefab_hash: -1134148135i32, desc: "Can\'t decide which mode you love most? This circuit board allows you to switch any connected device between operation modes." .into(), name: "Mode Control".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1923778429i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardPowerControl".into(), prefab_hash: -1923778429i32, desc: "Under distant suns and demanding environments, Stationeer systems need to balance reliability, resilience and versatility. The power control board allows remote enabling and disabling of selected devices, disconnecting manual operation. \n \nThe circuit board has two modes: \'Link\' switches all devices on or off; \'Toggle\' switches each device to their alternate state. " .into(), name: "Power Control".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2044446819i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardShipDisplay".into(), prefab_hash: -2044446819i32, desc: "When the original Stationeer Handbook collapsed under its own weight into a singularity, certain information was irretrievably lost. Amongst this mysterious corpus of knowledge is the exact purpose of the ship display board." .into(), name: "Ship Display".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2020180320i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "CircuitboardSolarControl".into(), prefab_hash: 2020180320i32, desc: "Adding a solar control board to a Console lets you manually control the horizontal and vertical angles of any connected Solar Panel." .into(), name: "Solar Control".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1228794916i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "CompositeRollCover".into(), prefab_hash: 1228794916i32, desc: "0.Operate\n1.Logic".into(), name: "Composite Roll Cover".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 8709219i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "CrateMkII".into(), prefab_hash: 8709219i32, desc: "A more heavily reinforced version of the iconic Dynamic Crate, the Crate Mk II is resistant to incredibly high pressures and temperatures. Short of disposing of it in a black hole, the Mk II is about as safe as luggage gets." .into(), name: "Crate Mk II".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Storage, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( 1531087544i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "DecayedFood".into(), prefab_hash: 1531087544i32, desc: "When your food decays, it turns into this. ODA scientists have attempted to determine the exact constituents of this substance, but it remains evasive and mysterious. Suffice to say, eating it is a bad idea. Research has determined, however, that The exact speed of decay varies individually by:\n\n- TEMPERATURE - Refrigeration will slow decay, but many foods will be damaged by exposure to extreme low pressure, as well as extreme heat. The optimum temperature is 0 kelvin (-272 C).\n\n- FOOD TYPE - Each food type has its own decay properties. Tomato Soup lasts a lot longer than a Tomato, for instance.\n\n- PRESSURE - Food decays faster when the pressure drops below 1 atmosphere (101kPa). Decay happens exponentially more quickly as the atmosphere approaches a perfect vacuum. There is no effect from higher pressures. \n\n- ATMOSPHERE - Different gases can slow and accelerate the decay process. The process will take account of respective gas ratios in mixed atmospheres in calculating the decay modifier. The following rates apply across all foods:\n\n> Oxygen x 1.3\n> Nitrogen x 0.6\n> Carbon Dioxide x 0.8\n> Volatiles x 1\n> Pollutant x 3\n> Nitrous Oxide x 1.5\n> Steam x 2\n> Vacuum (see PRESSURE above)\n\n" .into(), name: "Decayed Food".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 25u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1844430312i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "DeviceLfoVolume".into(), prefab_hash: -1844430312i32, desc: "The low frequency oscillator (or LFO) makes everything sound dark, twisted and crunchy by altering the shape of the waves output by a Logic Step Sequencer.\n \nTo set up an LFO:\n\n1. Place the LFO unit\n2. Set the LFO output to a Passive Speaker\n2. Set a sequencers\' output to LFO - so the sequencer\'s signal runs through the LFO to a speaker.\n3. Place a Stop Watch or use an existing one, then use a Logic Writer to write it to the LFO.\n4. Use another logic writer to write the BPM to the LFO.\n5. You are ready. This is the future. You\'re in space. Make it sound cool.\n\nFor more info, check out the music page." .into(), name: "Low frequency oscillator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Time, MemoryAccess::ReadWrite), (LogicType::Bpm, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Whole Note".into()), (1u32, "Half Note".into()), (2u32, "Quarter Note".into()), (3u32, "Eighth Note".into()), (4u32, "Sixteenth Note".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1762696475i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "DeviceStepUnit".into(), prefab_hash: 1762696475i32, desc: "0.C-2\n1.C#-2\n2.D-2\n3.D#-2\n4.E-2\n5.F-2\n6.F#-2\n7.G-2\n8.G#-2\n9.A-2\n10.A#-2\n11.B-2\n12.C-1\n13.C#-1\n14.D-1\n15.D#-1\n16.E-1\n17.F-1\n18.F#-1\n19.G-1\n20.G#-1\n21.A-1\n22.A#-1\n23.B-1\n24.C0\n25.C#0\n26.D0\n27.D#0\n28.E0\n29.F0\n30.F#0\n31.G0\n32.G#0\n33.A0\n34.A#0\n35.B0\n36.C1\n37.C#1\n38.D1\n39.D#1\n40.E1\n41.F1\n42.F#1\n43.G1\n44.G#1\n45.A1\n46.A#1\n47.B1\n48.C2\n49.C#2\n50.D2\n51.D#2\n52.E2\n53.F2\n54.F#2\n55.G2\n56.G#2\n57.A2\n58.A#2\n59.B2\n60.C3\n61.C#3\n62.D3\n63.D#3\n64.E3\n65.F3\n66.F#3\n67.G3\n68.G#3\n69.A3\n70.A#3\n71.B3\n72.C4\n73.C#4\n74.D4\n75.D#4\n76.E4\n77.F4\n78.F#4\n79.G4\n80.G#4\n81.A4\n82.A#4\n83.B4\n84.C5\n85.C#5\n86.D5\n87.D#5\n88.E5\n89.F5\n90.F#5\n91.G5 \n92.G#5\n93.A5\n94.A#5\n95.B5\n96.C6\n97.C#6\n98.D6\n99.D#6\n100.E6\n101.F6\n102.F#6\n103.G6\n104.G#6\n105.A6\n106.A#6\n107.B6\n108.C7\n109.C#7\n110.D7\n111.D#7\n112.E7\n113.F7\n114.F#7\n115.G7\n116.G#7\n117.A7\n118.A#7\n119.B7\n120.C8\n121.C#8\n122.D8\n123.D#8\n124.E8\n125.F8\n126.F#8\n127.G8" .into(), name: "Device Step Unit".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "C-2".into()), (1u32, "C#-2".into()), (2u32, "D-2" .into()), (3u32, "D#-2".into()), (4u32, "E-2".into()), (5u32, "F-2".into()), (6u32, "F#-2".into()), (7u32, "G-2".into()), (8u32, "G#-2".into()), (9u32, "A-2".into()), (10u32, "A#-2" .into()), (11u32, "B-2".into()), (12u32, "C-1".into()), (13u32, "C#-1".into()), (14u32, "D-1".into()), (15u32, "D#-1".into()), (16u32, "E-1".into()), (17u32, "F-1".into()), (18u32, "F#-1" .into()), (19u32, "G-1".into()), (20u32, "G#-1".into()), (21u32, "A-1".into()), (22u32, "A#-1".into()), (23u32, "B-1".into()), (24u32, "C0".into()), (25u32, "C#0".into()), (26u32, "D0" .into()), (27u32, "D#0".into()), (28u32, "E0".into()), (29u32, "F0".into()), (30u32, "F#0".into()), (31u32, "G0".into()), (32u32, "G#0".into()), (33u32, "A0".into()), (34u32, "A#0" .into()), (35u32, "B0".into()), (36u32, "C1".into()), (37u32, "C#1".into()), (38u32, "D1".into()), (39u32, "D#1".into()), (40u32, "E1".into()), (41u32, "F1".into()), (42u32, "F#1" .into()), (43u32, "G1".into()), (44u32, "G#1".into()), (45u32, "A1".into()), (46u32, "A#1".into()), (47u32, "B1".into()), (48u32, "C2".into()), (49u32, "C#2".into()), (50u32, "D2" .into()), (51u32, "D#2".into()), (52u32, "E2".into()), (53u32, "F2".into()), (54u32, "F#2".into()), (55u32, "G2".into()), (56u32, "G#2".into()), (57u32, "A2".into()), (58u32, "A#2" .into()), (59u32, "B2".into()), (60u32, "C3".into()), (61u32, "C#3".into()), (62u32, "D3".into()), (63u32, "D#3".into()), (64u32, "E3".into()), (65u32, "F3".into()), (66u32, "F#3" .into()), (67u32, "G3".into()), (68u32, "G#3".into()), (69u32, "A3".into()), (70u32, "A#3".into()), (71u32, "B3".into()), (72u32, "C4".into()), (73u32, "C#4".into()), (74u32, "D4" .into()), (75u32, "D#4".into()), (76u32, "E4".into()), (77u32, "F4".into()), (78u32, "F#4".into()), (79u32, "G4".into()), (80u32, "G#4".into()), (81u32, "A4".into()), (82u32, "A#4" .into()), (83u32, "B4".into()), (84u32, "C5".into()), (85u32, "C#5".into()), (86u32, "D5".into()), (87u32, "D#5".into()), (88u32, "E5".into()), (89u32, "F5".into()), (90u32, "F#5" .into()), (91u32, "G5 ".into()), (92u32, "G#5".into()), (93u32, "A5".into()), (94u32, "A#5".into()), (95u32, "B5".into()), (96u32, "C6".into()), (97u32, "C#6".into()), (98u32, "D6" .into()), (99u32, "D#6".into()), (100u32, "E6".into()), (101u32, "F6".into()), (102u32, "F#6".into()), (103u32, "G6".into()), (104u32, "G#6".into()), (105u32, "A6".into()), (106u32, "A#6" .into()), (107u32, "B6".into()), (108u32, "C7".into()), (109u32, "C#7".into()), (110u32, "D7".into()), (111u32, "D#7".into()), (112u32, "E7".into()), (113u32, "F7".into()), (114u32, "F#7" .into()), (115u32, "G7".into()), (116u32, "G#7".into()), (117u32, "A7".into()), (118u32, "A#7".into()), (119u32, "B7".into()), (120u32, "C8".into()), (121u32, "C#8".into()), (122u32, "D8" .into()), (123u32, "D#8".into()), (124u32, "E8".into()), (125u32, "F8".into()), (126u32, "F#8".into()), (127u32, "G8".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 519913639i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicAirConditioner".into(), prefab_hash: 519913639i32, desc: "The Sinotai-designed Huxi portable air conditioner cools by drawing heat from the atmosphere and storing it, or adding heat to the atmosphere from its internal tank. With a max internal pressure of 8106kPa, its capacity is relatively limited, physics being clear on this subject. To extend its temperature storage ability, bolt the Huxi to a Tank Connector, then connect it to a pipe network supplying hot or cold gases." .into(), name: "Portable Air Conditioner".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 1941079206i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicCrate".into(), prefab_hash: 1941079206i32, desc: "The humble dynamic crate has become a symbol of Stationeer invention and independence. With twelve slots and handles at either end for ease of carriage, it\'s both standard issue and critical kit for cadets and Commanders alike." .into(), name: "Dynamic Crate".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Storage, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( -2085885850i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "DynamicGPR".into(), prefab_hash: -2085885850i32, desc: "".into(), name: "".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -1713611165i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterAir".into(), prefab_hash: -1713611165i32, desc: "Portable gas tanks do one thing: store gas. But there\'s lots you can do with them. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it\'s full, you can refill a Canister (Oxygen) by attaching it to the tank\'s striped section. Or you could vent the tank\'s variable flow rate valve into a room and create an atmosphere. They also attach to rovers and rockets. Alternatively, kick it over and practice barrel rolling. The possibilities are endless." .into(), name: "Portable Gas Tank (Air)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -322413931i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterCarbonDioxide".into(), prefab_hash: -322413931i32, desc: "Portable gas tanks do one thing: store gas. To refill the tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or ... boom. Once it\'s full, you can refill a Canister (CO2) by attaching it to the tank\'s striped section. Or you could vent the tank\'s variable flow rate valve into a room and create an atmosphere ... of sorts." .into(), name: "Portable Gas Tank (CO2)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -1741267161i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterEmpty".into(), prefab_hash: -1741267161i32, desc: "Portable gas tanks store gas. To refill one, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or bad things happen. Once it\'s full, you can refill a Canister by attaching it to the tank\'s striped section. Or you could vent the tank\'s variable flow rate valve into a room and create an atmosphere." .into(), name: "Portable Gas Tank".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -817051527i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterFuel".into(), prefab_hash: -817051527i32, desc: "Portable tanks store gas. They\'re good at it. If you need to refill a tank, bolt it to a Kit (Tank Connector), then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or things get messy. You can refill a Canister (Fuel) by attaching it to the tank\'s striped section. Or you could use a Wrench to attach it to a rover or rocket for later. It\'s really up to you." .into(), name: "Portable Gas Tank (Fuel)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( 121951301i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterNitrogen".into(), prefab_hash: 121951301i32, desc: "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you\'ll end up with Nitrogen in places you weren\'t expecting. You can refill a Canister (Nitrogen) by attaching it to the tank\'s striped section. Or you could use a Wrench to attach it to a rover or rocket for later." .into(), name: "Portable Gas Tank (Nitrogen)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( 30727200i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterNitrousOxide".into(), prefab_hash: 30727200i32, desc: "".into(), name: "Portable Gas Tank (Nitrous Oxide)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( 1360925836i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterOxygen".into(), prefab_hash: 1360925836i32, desc: "Portable tanks store gas. If you need to refill a tank, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Try to avoid pushing it above 10 MPa, or you\'ll be picking tank shards out of your face. You can refill a Canister (Oxygen) by attaching it to the tank\'s striped section. Or you could vent it into a sealed room to create an atmosphere. Or even paint it pink, call it Steve and fill that sad space in your heart." .into(), name: "Portable Gas Tank (Oxygen)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( 396065382i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterPollutants".into(), prefab_hash: 396065382i32, desc: "".into(), name: "Portable Gas Tank (Pollutants)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -8883951i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterRocketFuel".into(), prefab_hash: -8883951i32, desc: "".into(), name: "Dynamic Gas Canister Rocket Fuel".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( 108086870i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterVolatiles".into(), prefab_hash: 108086870i32, desc: "Portable tanks store gas. To refill one, bolt it to a Kit (Tank Connector) using a Wrench, then connect it to a pipe network. Don\'t fill it above 10 MPa, unless you\'re the sort who loves complicated, flammable emergencies. You can refill a Canister (Volatiles) by attaching it to the tank\'s striped section. Or you could use a Wrench to attach to a rocket and show it around the Solar System." .into(), name: "Portable Gas Tank (Volatiles)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( 197293625i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasCanisterWater".into(), prefab_hash: 197293625i32, desc: "This portable tank stores liquid, and liquid only. You just have to fill it up. To do this, bolt one to a Kit (Tank Connector) using a Wrench, then connect it to Liquid Pipe (Straight) to supply liquid to a network. \nTry to keep pressure under 10 MPa, or you\'ll end up wet, hurt and sorry, without any of the fun.\nYou can refill a Liquid Canister (Water) by attaching it to the tank\'s striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself." .into(), name: "Portable Liquid Tank (Water)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Gas Canister".into(), typ : Class::LiquidCanister } ] .into_iter() .collect(), } .into(), ); map.insert( -386375420i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasTankAdvanced".into(), prefab_hash: -386375420i32, desc: "0.Mode0\n1.Mode1".into(), name: "Gas Tank Mk II".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -1264455519i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGasTankAdvancedOxygen".into(), prefab_hash: -1264455519i32, desc: "0.Mode0\n1.Mode1".into(), name: "Portable Gas Tank Mk II (Oxygen)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Gas Canister".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -82087220i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicGenerator".into(), prefab_hash: -82087220i32, desc: "Every Stationeer\'s best friend, the portable generator gets you up and running, fast. Fill it with a Canister (Fuel) to power up and charge a Battery Cell (Small), or attach it to a Power Connector to link it into your electrical network. It\'s pressure driven, so functions more efficiently at lower temperatures, and REALLY efficiently if supercooled. Perfecting your fuel mix also makes a big difference." .into(), name: "Portable Generator".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : "Battery".into(), typ : Class::Battery } ] .into_iter() .collect(), } .into(), ); map.insert( 587726607i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicHydroponics".into(), prefab_hash: 587726607i32, desc: "".into(), name: "Portable Hydroponics".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister }, SlotInfo { name : "Liquid Canister".into(), typ : Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : Class::Plant }, SlotInfo { name : "Liquid Canister".into(), typ : Class::Plant } ] .into_iter() .collect(), } .into(), ); map.insert( -21970188i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "DynamicLight".into(), prefab_hash: -21970188i32, desc: "Philippe Starck might not applaud, but this battery-powered light source undarkens the corners when illumination\'s lacking. Powered by any battery, it\'s a \'no-frills\' Xigo design that can be cheaply fabricated with the minimum of fuss. Unless you like fuss. In which case, fuss all you like." .into(), name: "Portable Light".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -1939209112i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicLiquidCanisterEmpty".into(), prefab_hash: -1939209112i32, desc: "This portable tank stores liquid, and liquid only. You can bolt one to a Kit (Liquid Tank Connector) using a Wrench, then connect it to a pipe network to refill it. You can refill a Liquid Canister (Water) by attaching it to the tank\'s striped section. Or you could use a Wrench to attach it to a rocket and take it somewhere distant and dry, then feel good about yourself." .into(), name: "Portable Liquid Tank".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.025f32, radiation_factor: 0.025f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } ] .into_iter() .collect(), } .into(), ); map.insert( 2130739600i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicMKIILiquidCanisterEmpty".into(), prefab_hash: 2130739600i32, desc: "An empty, insulated liquid Gas Canister." .into(), name: "Portable Liquid Tank Mk II".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } ] .into_iter() .collect(), } .into(), ); map.insert( -319510386i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicMKIILiquidCanisterWater".into(), prefab_hash: -319510386i32, desc: "An insulated version of the Portable Liquid Tank Mk II (Water), for storing liquids without them gaining or losing temperature." .into(), name: "Portable Liquid Tank Mk II (Water)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } ] .into_iter() .collect(), } .into(), ); map.insert( 755048589i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "DynamicScrubber".into(), prefab_hash: 755048589i32, desc: "A portable scrubber does just what it sounds like: removes specific substances from the air. For instance, attaching a Filter (Carbon Dioxide) will pull Carbon Dioxide from the surrounding atmosphere. Note that the scrubber has room for one battery and two filters, which will double its operating speed. Neat. When it reaches an internal pressure of 8106kPA, an error signal will flash on the switch, indicating it needs to be emptied. Either vent it directly, or attach it to a pipe network via a Kit (Tank Connector) and a Wrench." .into(), name: "Portable Air Scrubber".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter } ] .into_iter() .collect(), } .into(), ); map.insert( 106953348i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "DynamicSkeleton".into(), prefab_hash: 106953348i32, desc: "".into(), name: "Skeleton".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -311170652i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ElectronicPrinterMod".into(), prefab_hash: -311170652i32, desc: "Apply to an Electronics Printer with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options." .into(), name: "Electronic Printer Mod".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -110788403i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ElevatorCarrage".into(), prefab_hash: -110788403i32, desc: "".into(), name: "Elevator".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1730165908i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityChick".into(), prefab_hash: 1730165908i32, desc: "Once a chick is hatched, it gets hungry. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not." .into(), name: "Entity Chick".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] .into_iter() .collect(), } .into(), ); map.insert( 334097180i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityChickenBrown".into(), prefab_hash: 334097180i32, desc: "Like so many of its brethren, this is a chicken. A brown one. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not." .into(), name: "Entity Chicken Brown".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] .into_iter() .collect(), } .into(), ); map.insert( 1010807532i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityChickenWhite".into(), prefab_hash: 1010807532i32, desc: "It\'s a chicken, as white as moondust. It will eat soybeans, corn, and wheat, and lay eggs. Some will be fertilized, producing further chickens. Some will not." .into(), name: "Entity Chicken White".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] .into_iter() .collect(), } .into(), ); map.insert( 966959649i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityRoosterBlack".into(), prefab_hash: 966959649i32, desc: "This is a rooster. It is black. There is dignity in this.".into(), name: "Entity Rooster Black".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] .into_iter() .collect(), } .into(), ); map.insert( -583103395i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "EntityRoosterBrown".into(), prefab_hash: -583103395i32, desc: "The common brown rooster. Don\'t let it hear you say that." .into(), name: "Entity Rooster Brown".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Brain".into(), typ : Class::Organ }] .into_iter() .collect(), } .into(), ); map.insert( 1517856652i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "Fertilizer".into(), prefab_hash: 1517856652i32, desc: "Fertilizer alters plant growth processes, and is created by the basic composter and the Advanced Composter using organic matter.\nFertilizer\'s affects depend on its ingredients:\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for\n\nThe effect of these ingredients depends on their respective proportions in the composter when processing is activated. " .into(), name: "Fertilizer".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -86315541i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "FireArmSMG".into(), prefab_hash: -86315541i32, desc: "0.Single\n1.Auto".into(), name: "Fire Arm SMG".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "".into(), typ : Class::Magazine }] .into_iter() .collect(), } .into(), ); map.insert( 1845441951i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_10m".into(), prefab_hash: 1845441951i32, desc: "".into(), name: "Flag (ODA 10m)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1159126354i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_4m".into(), prefab_hash: 1159126354i32, desc: "".into(), name: "Flag (ODA 4m)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1998634960i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_6m".into(), prefab_hash: 1998634960i32, desc: "".into(), name: "Flag (ODA 6m)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -375156130i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Flag_ODA_8m".into(), prefab_hash: -375156130i32, desc: "".into(), name: "Flag (ODA 8m)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 118685786i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "FlareGun".into(), prefab_hash: 118685786i32, desc: "".into(), name: "Flare Gun".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Magazine".into(), typ : Class::Flare }, SlotInfo { name : "".into(), typ : Class::Blocked } ] .into_iter() .collect(), } .into(), ); map.insert( 1840108251i32, StructureCircuitHolderTemplate { templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "H2Combustor".into(), prefab_hash: 1840108251i32, desc: "Adapted slightly from its original Recurso design, the Volatiles Combustor does exactly what its name suggests - it burns a mixture of volatiles and Oxygen to create water. Extremely useful in hot or arid environments, users need to be aware that the combustor outputs considerable waste heat. The device is also less than perfectly efficient, resulting in the autoignition of volatiles in the chamber, and the production of waste gases which must be dealt with." .into(), name: "H2 Combustor".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::PressureInput, MemoryAccess::Read), (LogicType::TemperatureInput, MemoryAccess::Read), (LogicType::RatioOxygenInput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioNitrogenInput, MemoryAccess::Read), (LogicType::RatioPollutantInput, MemoryAccess::Read), (LogicType::RatioVolatilesInput, MemoryAccess::Read), (LogicType::RatioWaterInput, MemoryAccess::Read), (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), (LogicType::TotalMolesInput, MemoryAccess::Read), (LogicType::PressureOutput, MemoryAccess::Read), (LogicType::TemperatureOutput, MemoryAccess::Read), (LogicType::RatioOxygenOutput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioNitrogenOutput, MemoryAccess::Read), (LogicType::RatioPollutantOutput, MemoryAccess::Read), (LogicType::RatioVolatilesOutput, MemoryAccess::Read), (LogicType::RatioWaterOutput, MemoryAccess::Read), (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), (LogicType::TotalMolesOutput, MemoryAccess::Read), (LogicType::CombustionInput, MemoryAccess::Read), (LogicType::CombustionOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioSteamInput, MemoryAccess::Read), (LogicType::RatioSteamOutput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Idle".into()), (1u32, "Active".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: Some(2u32), has_activate_state: true, has_atmosphere: true, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 247238062i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "Handgun".into(), prefab_hash: 247238062i32, desc: "".into(), name: "Handgun".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Magazine".into(), typ : Class::Magazine }] .into_iter() .collect(), } .into(), ); map.insert( 1254383185i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "HandgunMagazine".into(), prefab_hash: 1254383185i32, desc: "".into(), name: "Handgun Magazine".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Magazine, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -857713709i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "HumanSkull".into(), prefab_hash: -857713709i32, desc: "".into(), name: "Human Skull".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -73796547i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ImGuiCircuitboardAirlockControl".into(), prefab_hash: -73796547i32, desc: "".into(), name: "Airlock (Experimental)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Circuitboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -842048328i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemActiveVent".into(), prefab_hash: -842048328i32, desc: "When constructed, this kit places an Active Vent on any support structure." .into(), name: "Kit (Active Vent)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1871048978i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAdhesiveInsulation".into(), prefab_hash: 1871048978i32, desc: "".into(), name: "Adhesive Insulation".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 20u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1722785341i32, ItemCircuitHolderTemplate { templateType: "ItemCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "ItemAdvancedTablet".into(), prefab_hash: 1722785341i32, desc: "The advanced Xigo Padi 2 tablet is an improved version of the basic Handheld Tablet, boasting two cartridge slots. The Padi 2 accepts Atmos Analyzer, Tracker, Medical Analyzer, Ore Scanner, eReader, and various other cartridges.\n\t \n\t With a Integrated Circuit (IC10) in the Programmable Chip, you can access variable slots on the carrying human using the device numbers (d0, d1, etc...), so long as the item can be access via logic, such as the Hardsuit.Connects to Logic Transmitter" .into(), name: "Advanced Tablet".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::Volume, MemoryAccess::ReadWrite), (LogicType::SoundAlert, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: true, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Cartridge".into(), typ : Class::Cartridge }, SlotInfo { name : "Cartridge1".into(), typ : Class::Cartridge }, SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip } ] .into_iter() .collect(), } .into(), ); map.insert( 176446172i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAlienMushroom".into(), prefab_hash: 176446172i32, desc: "".into(), name: "Alien Mushroom".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -9559091i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAmmoBox".into(), prefab_hash: -9559091i32, desc: "".into(), name: "Ammo Box".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 201215010i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemAngleGrinder".into(), prefab_hash: 201215010i32, desc: "Angles-be-gone with the trusty angle grinder.".into(), name: "Angle Grinder".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 1385062886i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemArcWelder".into(), prefab_hash: 1385062886i32, desc: "".into(), name: "Arc Welder".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 1757673317i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAreaPowerControl".into(), prefab_hash: 1757673317i32, desc: "This kit places a Area Power Control (APC) on any support structure. The APC kit has two options, selecting which direction you would like the APC power to flow." .into(), name: "Kit (Power Controller)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 412924554i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAstroloyIngot".into(), prefab_hash: 412924554i32, desc: "Due to the original Stationeer manual collapsing into a singularity, Astroloy recipes have been warped by spacetime contortions. The correct Astroloy recipe, as memorialized for all time in a series of charming plastic icons, is 1.0 Copper, 1.0 Cobalt, and 2.0 Steel." .into(), name: "Ingot (Astroloy)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Astroloy".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1662476145i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAstroloySheets".into(), prefab_hash: -1662476145i32, desc: "".into(), name: "Astroloy Sheets".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 789015045i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAuthoringTool".into(), prefab_hash: 789015045i32, desc: "".into(), name: "Authoring Tool".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1731627004i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemAuthoringToolRocketNetwork".into(), prefab_hash: -1731627004i32, desc: "".into(), name: "".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1262580790i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBasketBall".into(), prefab_hash: -1262580790i32, desc: "".into(), name: "Basket Ball".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 700133157i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCell".into(), prefab_hash: 700133157i32, desc: "Harnessing a design pioneered in the early 21st century, the small battery cell is the Stationeer\'s basic unit of portable electrical power. While it lacks the charge of a Battery Cell (Large) or Battery Cell (Nuclear), it has the humble advantage of being fabricated from basic resources.\n\nPOWER OUTPUT\nThe small cell stores up to 36000 watts of power." .into(), name: "Battery Cell (Small)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Battery, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), (5u32, "High".into()), (6u32, "Full".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( -459827268i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCellLarge".into(), prefab_hash: -459827268i32, desc: "First mass-produced by Xigo in 2155 on the basis of a unattributed prototype, the classic silicon anode solid-state design extends its optimum temperature range.\n\nPOWER OUTPUT\nThe large power cell can discharge 288kW of power. \n" .into(), name: "Battery Cell (Large)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Battery, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), (5u32, "High".into()), (6u32, "Full".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( 544617306i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCellNuclear".into(), prefab_hash: 544617306i32, desc: "Illegal on Earth since the Chengdu Event, Norsec nuclear power cells found a new and drastically less safety-conscious market offworld.\n\nPOWER OUTPUT\nPushing the power-weight balance to its limits, the \'nuke\' has a 2.3 megawatt charge (2304000W), reflecting its reliance on exotic superalloys." .into(), name: "Battery Cell (Nuclear)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Battery, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), (5u32, "High".into()), (6u32, "Full".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( -1866880307i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryCharger".into(), prefab_hash: -1866880307i32, desc: "This kit produces a 5-slot Kit (Battery Charger)." .into(), name: "Kit (Battery Charger)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1008295833i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBatteryChargerSmall".into(), prefab_hash: 1008295833i32, desc: "".into(), name: "Battery Charger Small".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -869869491i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemBeacon".into(), prefab_hash: -869869491i32, desc: "".into(), name: "Tracking Beacon".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -831480639i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBiomass".into(), prefab_hash: -831480639i32, desc: "Diced organic material that is returned when food and organic matter is passed through the Recycler and Centrifuge. Can be burned in a Furnace into Charcoal for use in the Generator (Solid Fuel)." .into(), name: "Biomass".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some(vec![("Biomass".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 893514943i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemBreadLoaf".into(), prefab_hash: 893514943i32, desc: "".into(), name: "Bread Loaf".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1792787349i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableAnalyser".into(), prefab_hash: -1792787349i32, desc: "".into(), name: "Kit (Cable Analyzer)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -466050668i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableCoil".into(), prefab_hash: -466050668i32, desc: "Bodily metaphors are tired and anthropocentric, but it was Frida Stuppen, the first ODA Administrator, who said, \'Let the cabling be as the nerve and the vessel, transmitting power and data alike through systems we forge among the stars.\' Later commentators suggested that she was simply putting a romantic gloss on a piece of dubious economy. Whatever the case, standard cabling is where any Stationeer\'s network begins. \nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." .into(), name: "Cable Coil".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2060134443i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableCoilHeavy".into(), prefab_hash: 2060134443i32, desc: "Use heavy cable coil for power systems with large draws. Unlike , which can only safely conduct 5kW, heavy cables can transmit up to 100kW." .into(), name: "Cable Coil (Heavy)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 195442047i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCableFuse".into(), prefab_hash: 195442047i32, desc: "".into(), name: "Kit (Cable Fuses)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2104175091i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedCondensedMilk".into(), prefab_hash: -2104175091i32, desc: "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Condensed Milk and an Empty Can, canned condensed milk is fairly high in nutrition, and does not decay." .into(), name: "Canned Condensed Milk".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -999714082i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedEdamame".into(), prefab_hash: -999714082i32, desc: "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Soybean and an Empty Can, canned edamame beans are fairly high in nutrition, and do not decay." .into(), name: "Canned Edamame".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1344601965i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedMushroom".into(), prefab_hash: -1344601965i32, desc: "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Mushroom and a Empty Can, delicious mushroom soup is fairly high in nutrition, and does not decay." .into(), name: "Canned Mushroom".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1161510063i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedPowderedEggs".into(), prefab_hash: 1161510063i32, desc: "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Powdered Eggs and an Empty Can, canned powdered eggs are an exciting, dynamic food that\'s fairly high in nutrition, and does not decay." .into(), name: "Canned Powdered Eggs".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1185552595i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCannedRicePudding".into(), prefab_hash: -1185552595i32, desc: "Made in an Advanced Packaging Machine or Basic Packaging Machine, using Cooked Rice and an Empty Can, canned rice pudding is a sweet treat, fairly high in nutrition, and does not decay." .into(), name: "Canned Rice Pudding".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 791746840i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCerealBar".into(), prefab_hash: 791746840i32, desc: "Sustains, without decay. If only all our relationships were so well balanced." .into(), name: "Cereal Bar".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 252561409i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCharcoal".into(), prefab_hash: 252561409i32, desc: "Charcoal is a lightweight, black carbon residue produced by heating Biomass in a Arc Furnace. It contains less energy potential than Ore (Coal), but can be used as a basic fuel source. Charcoal can also be substituted for coal in alloy recipes." .into(), name: "Charcoal".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 200u32, reagents: Some(vec![("Carbon".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -772542081i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightBlue".into(), prefab_hash: -772542081i32, desc: "A safe and slightly rave-some source of blue light. Snap to activate." .into(), name: "Chem Light (Blue)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -597479390i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightGreen".into(), prefab_hash: -597479390i32, desc: "Enliven the dreariest, airless rock with this glowy green light. Snap to activate." .into(), name: "Chem Light (Green)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -525810132i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightRed".into(), prefab_hash: -525810132i32, desc: "A red glowstick. Snap to activate. Then reach for the lasers." .into(), name: "Chem Light (Red)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1312166823i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightWhite".into(), prefab_hash: 1312166823i32, desc: "Snap the glowstick to activate a pale radiance that keeps the darkness at bay." .into(), name: "Chem Light (White)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1224819963i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChemLightYellow".into(), prefab_hash: 1224819963i32, desc: "Dispel the darkness with this yellow glowstick.".into(), name: "Chem Light (Yellow)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 234601764i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChocolateBar".into(), prefab_hash: 234601764i32, desc: "".into(), name: "Chocolate Bar".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -261575861i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChocolateCake".into(), prefab_hash: -261575861i32, desc: "".into(), name: "Chocolate Cake".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 860793245i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemChocolateCerealBar".into(), prefab_hash: 860793245i32, desc: "".into(), name: "Chocolate Cereal Bar".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1724793494i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCoalOre".into(), prefab_hash: 1724793494i32, desc: "Humanity wouldn\'t have got to space without humble, combustible coal. Burn it in a , smelt it in the Furnace to create alloys, or use it in the Reagent Processor to make Spray Paint (Black)." .into(), name: "Ore (Coal)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Hydrocarbon".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -983091249i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCobaltOre".into(), prefab_hash: -983091249i32, desc: "Cobalt is a chemical element with the symbol \"Co\" and is typically found in only small deposits. Cobalt is a rare substance, but used create the Heal Pill and several alloys." .into(), name: "Ore (Cobalt)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Cobalt".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 457286516i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCocoaPowder".into(), prefab_hash: 457286516i32, desc: "".into(), name: "Cocoa Powder".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 20u32, reagents: Some(vec![("Cocoa".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 680051921i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCocoaTree".into(), prefab_hash: 680051921i32, desc: "".into(), name: "Cocoa".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 20u32, reagents: Some(vec![("Cocoa".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1800622698i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCoffeeMug".into(), prefab_hash: 1800622698i32, desc: "".into(), name: "Coffee Mug".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1058547521i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemConstantanIngot".into(), prefab_hash: 1058547521i32, desc: "".into(), name: "Ingot (Constantan)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Constantan".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1715917521i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedCondensedMilk".into(), prefab_hash: 1715917521i32, desc: "A high-nutrient cooked food, which can be canned.".into(), name: "Condensed Milk".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 10u32, reagents: Some(vec![("Milk".into(), 100f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1344773148i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedCorn".into(), prefab_hash: 1344773148i32, desc: "A high-nutrient cooked food, which can be canned.".into(), name: "Cooked Corn".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 10u32, reagents: Some(vec![("Corn".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1076892658i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedMushroom".into(), prefab_hash: -1076892658i32, desc: "A high-nutrient cooked food, which can be canned.".into(), name: "Cooked Mushroom".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 10u32, reagents: Some(vec![("Mushroom".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1712264413i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedPowderedEggs".into(), prefab_hash: -1712264413i32, desc: "A high-nutrient cooked food, which can be canned.".into(), name: "Powdered Eggs".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 10u32, reagents: Some(vec![("Egg".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1849281546i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedPumpkin".into(), prefab_hash: 1849281546i32, desc: "A high-nutrient cooked food, which can be canned.".into(), name: "Cooked Pumpkin".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 10u32, reagents: Some(vec![("Pumpkin".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2013539020i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedRice".into(), prefab_hash: 2013539020i32, desc: "A high-nutrient cooked food, which can be canned.".into(), name: "Cooked Rice".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 10u32, reagents: Some(vec![("Rice".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1353449022i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedSoybean".into(), prefab_hash: 1353449022i32, desc: "A high-nutrient cooked food, which can be canned.".into(), name: "Cooked Soybean".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 10u32, reagents: Some(vec![("Soy".into(), 5f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -709086714i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCookedTomato".into(), prefab_hash: -709086714i32, desc: "A high-nutrient cooked food, which can be canned.".into(), name: "Cooked Tomato".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 10u32, reagents: Some(vec![("Tomato".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -404336834i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCopperIngot".into(), prefab_hash: -404336834i32, desc: "Copper ingots are created by smelting Ore (Copper) in the Furnace and Arc Furnace, and used to create a variety of items." .into(), name: "Ingot (Copper)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Copper".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -707307845i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCopperOre".into(), prefab_hash: -707307845i32, desc: "Copper is a chemical element with the symbol \"Cu\". This common and highly conductive material is found on most astronomical bodies and is used in a variety of manufacturing processes including electronic components, alloys, and wires." .into(), name: "Ore (Copper)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Copper".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 258339687i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCorn".into(), prefab_hash: 258339687i32, desc: "A long growth time staple crop. Its low requirement for darkness allows for accelerated growing if provided with extra light." .into(), name: "Corn".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 20u32, reagents: Some(vec![("Corn".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 545034114i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCornSoup".into(), prefab_hash: 545034114i32, desc: "Made using Cooked Corn and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Faily high in nutrition, canned food does not decay." .into(), name: "Corn Soup".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1756772618i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCreditCard".into(), prefab_hash: -1756772618i32, desc: "".into(), name: "Credit Card".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100000u32, reagents: None, slot_class: Class::CreditCard, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 215486157i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCropHay".into(), prefab_hash: 215486157i32, desc: "".into(), name: "Hay".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 856108234i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemCrowbar".into(), prefab_hash: 856108234i32, desc: "Recurso\'s entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise." .into(), name: "Crowbar".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1005843700i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDataDisk".into(), prefab_hash: 1005843700i32, desc: "".into(), name: "Data Disk".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::DataDisk, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 902565329i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDirtCanister".into(), prefab_hash: 902565329i32, desc: "A container the will fill with Dirt when using a Mining Drill when placed inside a Mining Belt. You can then use this Dirt Canister with the Terrain Manipulator to adjust the terrain to suit your needs." .into(), name: "Dirt Canister".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1234745580i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDirtyOre".into(), prefab_hash: -1234745580i32, desc: "Ore mined from bedrock via the Deep Miner which then can be used in the Centrifuge, or Combustion Centrifuge. Once processed, it produces ore in a ratio similar to the average found on the planet\'s surface. " .into(), name: "Dirty Ore".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2124435700i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDisposableBatteryCharger".into(), prefab_hash: -2124435700i32, desc: "Consumable battery the recharges your suit battery. If used on a HEM-Droid it will recharge the HEM-Droids internal battery." .into(), name: "Disposable Battery Charger".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2009673399i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemDrill".into(), prefab_hash: 2009673399i32, desc: "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature." .into(), name: "Hand Drill".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -1943134693i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDuctTape".into(), prefab_hash: -1943134693i32, desc: "In the distant past, one of Earth\'s great champions taught a generation of \'Fix-It People\' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage." .into(), name: "Duct Tape".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1072914031i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDynamicAirCon".into(), prefab_hash: 1072914031i32, desc: "".into(), name: "Kit (Portable Air Conditioner)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -971920158i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemDynamicScrubber".into(), prefab_hash: -971920158i32, desc: "".into(), name: "Kit (Portable Scrubber)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -524289310i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemEggCarton".into(), prefab_hash: -524289310i32, desc: "Within, eggs reside in mysterious, marmoreal silence.".into(), name: "Egg Carton".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Storage, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "" .into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : Class::Egg }, SlotInfo { name : "".into(), typ : Class::Egg } ] .into_iter() .collect(), } .into(), ); map.insert( 731250882i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemElectronicParts".into(), prefab_hash: 731250882i32, desc: "".into(), name: "Electronic Parts".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 20u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 502280180i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemElectrumIngot".into(), prefab_hash: 502280180i32, desc: "".into(), name: "Ingot (Electrum)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Electrum".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -351438780i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyAngleGrinder".into(), prefab_hash: -351438780i32, desc: "".into(), name: "Emergency Angle Grinder".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -1056029600i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyArcWelder".into(), prefab_hash: -1056029600i32, desc: "".into(), name: "Emergency Arc Welder".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 976699731i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyCrowbar".into(), prefab_hash: 976699731i32, desc: "".into(), name: "Emergency Crowbar".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2052458905i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyDrill".into(), prefab_hash: -2052458905i32, desc: "".into(), name: "Emergency Drill".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 1791306431i32, ItemSuitTemplate { templateType: "ItemSuit".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyEvaSuit".into(), prefab_hash: 1791306431i32, desc: "".into(), name: "Emergency Eva Suit".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Suit, sorting_class: SortingClass::Clothing, }, thermal_info: Some(ThermalInfo { convection_factor: 0.2f32, radiation_factor: 0.2f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 10f32 }), slots: vec![ SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, SlotInfo { name : "Life Support".into(), typ : Class::Battery }, SlotInfo { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Filter" .into(), typ : Class::GasFilter }, SlotInfo { name : "Filter".into(), typ : Class::GasFilter } ] .into_iter() .collect(), suit_info: SuitInfo { hygine_reduction_multiplier: 1f32, waste_max_pressure: 4053f32, }, } .into(), ); map.insert( -1061510408i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyPickaxe".into(), prefab_hash: -1061510408i32, desc: "".into(), name: "Emergency Pickaxe".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 266099983i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyScrewdriver".into(), prefab_hash: 266099983i32, desc: "".into(), name: "Emergency Screwdriver".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 205916793i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencySpaceHelmet".into(), prefab_hash: 205916793i32, desc: "".into(), name: "Emergency Space Helmet".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Helmet, sorting_class: SortingClass::Clothing, }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 3f32 }), logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::Flush, MemoryAccess::Write), (LogicType::SoundAlert, MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( 1661941301i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyToolBelt".into(), prefab_hash: 1661941301i32, desc: "".into(), name: "Emergency Tool Belt".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool } ] .into_iter() .collect(), } .into(), ); map.insert( 2102803952i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyWireCutters".into(), prefab_hash: 2102803952i32, desc: "".into(), name: "Emergency Wire Cutters".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 162553030i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmergencyWrench".into(), prefab_hash: 162553030i32, desc: "".into(), name: "Emergency Wrench".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1013818348i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemEmptyCan".into(), prefab_hash: 1013818348i32, desc: "Used for making soups when combined with food in the Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay." .into(), name: "Empty Can".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 10u32, reagents: Some(vec![("Steel".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1677018918i32, ItemSuitTemplate { templateType: "ItemSuit".into(), prefab: PrefabInfo { prefab_name: "ItemEvaSuit".into(), prefab_hash: 1677018918i32, desc: "The EVA suit is the basic suit Stationeers need to survive in the inhospitable environment of space. For more information on EVA suits, consult the EVA suit guide." .into(), name: "Eva Suit".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Suit, sorting_class: SortingClass::Clothing, }, thermal_info: Some(ThermalInfo { convection_factor: 0.2f32, radiation_factor: 0.2f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 10f32 }), slots: vec![ SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, SlotInfo { name : "Life Support".into(), typ : Class::Battery }, SlotInfo { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Filter" .into(), typ : Class::GasFilter }, SlotInfo { name : "Filter".into(), typ : Class::GasFilter } ] .into_iter() .collect(), suit_info: SuitInfo { hygine_reduction_multiplier: 1f32, waste_max_pressure: 4053f32, }, } .into(), ); map.insert( 235361649i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemExplosive".into(), prefab_hash: 235361649i32, desc: "".into(), name: "Remote Explosive".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 892110467i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFern".into(), prefab_hash: 892110467i32, desc: "There was a time, when Stationeers had to make Fenoxitone Powder using the Reagent Processor. Recent advances in technology allow you to use equivalent quantities of fern directly in recipes." .into(), name: "Fern".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some(vec![("Fenoxitone".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -383972371i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFertilizedEgg".into(), prefab_hash: -383972371i32, desc: "To hatch it requires an incubation temperature of between 35 and 45 degrees Celsius and will hatch into a Chick. If the egg is exposed to tepratures below 10 degrees it will no longer be viable." .into(), name: "Egg".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 1u32, reagents: Some(vec![("Egg".into(), 1f64)].into_iter().collect()), slot_class: Class::Egg, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 266654416i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFilterFern".into(), prefab_hash: 266654416i32, desc: "A fern adapted by Agrizeroto process a much greater volume of Carbon Dioxide into Oxygen than an average plant." .into(), name: "Darga Fern".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2011191088i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlagSmall".into(), prefab_hash: 2011191088i32, desc: "".into(), name: "Kit (Small Flag)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2107840748i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlashingLight".into(), prefab_hash: -2107840748i32, desc: "".into(), name: "Kit (Flashing Light)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -838472102i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemFlashlight".into(), prefab_hash: -838472102i32, desc: "A flashlight with a narrow and wide beam options.".into(), name: "Flashlight".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Low Power".into()), (1u32, "High Power".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -665995854i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlour".into(), prefab_hash: -665995854i32, desc: "Pulverized Wheat, a key ingredient in many foods created by the Microwave and the Kit (Automated Oven)." .into(), name: "Flour".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Flour".into(), 50f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1573623434i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerBlue".into(), prefab_hash: -1573623434i32, desc: "".into(), name: "Flower (Blue)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1513337058i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerGreen".into(), prefab_hash: -1513337058i32, desc: "".into(), name: "Flower (Green)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1411986716i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerOrange".into(), prefab_hash: -1411986716i32, desc: "".into(), name: "Flower (Orange)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -81376085i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerRed".into(), prefab_hash: -81376085i32, desc: "".into(), name: "Flower (Red)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1712822019i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFlowerYellow".into(), prefab_hash: 1712822019i32, desc: "".into(), name: "Flower (Yellow)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -57608687i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFrenchFries".into(), prefab_hash: -57608687i32, desc: "Because space would suck without \'em.".into(), name: "Canned French Fries".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1371786091i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemFries".into(), prefab_hash: 1371786091i32, desc: "".into(), name: "French Fries".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -767685874i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterCarbonDioxide".into(), prefab_hash: -767685874i32, desc: "".into(), name: "Canister (CO2)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::GasCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), } .into(), ); map.insert( 42280099i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterEmpty".into(), prefab_hash: 42280099i32, desc: "".into(), name: "Canister".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::GasCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), } .into(), ); map.insert( -1014695176i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterFuel".into(), prefab_hash: -1014695176i32, desc: "".into(), name: "Canister (Fuel)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::GasCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), } .into(), ); map.insert( 2145068424i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterNitrogen".into(), prefab_hash: 2145068424i32, desc: "".into(), name: "Canister (Nitrogen)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::GasCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), } .into(), ); map.insert( -1712153401i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterNitrousOxide".into(), prefab_hash: -1712153401i32, desc: "".into(), name: "Gas Canister (Sleeping)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::GasCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), } .into(), ); map.insert( -1152261938i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterOxygen".into(), prefab_hash: -1152261938i32, desc: "".into(), name: "Canister (Oxygen)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::GasCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), } .into(), ); map.insert( -1552586384i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterPollutants".into(), prefab_hash: -1552586384i32, desc: "".into(), name: "Canister (Pollutants)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::GasCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), } .into(), ); map.insert( -668314371i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterSmart".into(), prefab_hash: -668314371i32, desc: "0.Mode0\n1.Mode1".into(), name: "Gas Canister (Smart)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::GasCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), } .into(), ); map.insert( -472094806i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterVolatiles".into(), prefab_hash: -472094806i32, desc: "".into(), name: "Canister (Volatiles)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::GasCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 64f32 }), } .into(), ); map.insert( -1854861891i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasCanisterWater".into(), prefab_hash: -1854861891i32, desc: "".into(), name: "Liquid Canister (Water)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::LiquidCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 12.1f32, }), } .into(), ); map.insert( 1635000764i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxide".into(), prefab_hash: 1635000764i32, desc: "Given humanity\'s obsession with exhaling Carbon Dioxide, all Stationeers are issued two basic Sinotai Carbon Dioxide Gas Filter as part of their standard deployment kit (SDK). These filters allow passage of Carbon Dioxide into the suit\'s waste Canister, but are also critical components of the Portable Air Scrubber and the Filtration. The Medium Filter (Carbon Dioxide) and Heavy Filter (Carbon Dioxide) are also available." .into(), name: "Filter (Carbon Dioxide)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::CarbonDioxide), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -185568964i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxideInfinite".into(), prefab_hash: -185568964i32, desc: "A filter that selectively targets Carbon Dioxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." .into(), name: "Catalytic Filter (Carbon Dioxide)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::CarbonDioxide), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1876847024i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxideL".into(), prefab_hash: 1876847024i32, desc: "".into(), name: "Heavy Filter (Carbon Dioxide)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::CarbonDioxide), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 416897318i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterCarbonDioxideM".into(), prefab_hash: 416897318i32, desc: "".into(), name: "Medium Filter (Carbon Dioxide)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::CarbonDioxide), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 632853248i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogen".into(), prefab_hash: 632853248i32, desc: "Filters are used to capture various gases, which can be disposed of or used elsewhere. Nitrogen is a byproduct of smelting various ores, notably Ice (Nitrice), which may be combined with Oxygen to make a breathable - and considerably less flammable - atmosphere." .into(), name: "Filter (Nitrogen)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Nitrogen), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 152751131i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogenInfinite".into(), prefab_hash: 152751131i32, desc: "A filter that selectively targets Nitrogen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." .into(), name: "Catalytic Filter (Nitrogen)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Nitrogen), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1387439451i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogenL".into(), prefab_hash: -1387439451i32, desc: "".into(), name: "Heavy Filter (Nitrogen)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Nitrogen), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -632657357i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrogenM".into(), prefab_hash: -632657357i32, desc: "".into(), name: "Medium Filter (Nitrogen)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Nitrogen), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1247674305i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxide".into(), prefab_hash: -1247674305i32, desc: "".into(), name: "Filter (Nitrous Oxide)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::NitrousOxide), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -123934842i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxideInfinite".into(), prefab_hash: -123934842i32, desc: "A filter that selectively targets Nitrous Oxide. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." .into(), name: "Catalytic Filter (Nitrous Oxide)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::NitrousOxide), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 465267979i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxideL".into(), prefab_hash: 465267979i32, desc: "".into(), name: "Heavy Filter (Nitrous Oxide)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::NitrousOxide), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1824284061i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterNitrousOxideM".into(), prefab_hash: 1824284061i32, desc: "".into(), name: "Medium Filter (Nitrous Oxide)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::NitrousOxide), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -721824748i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygen".into(), prefab_hash: -721824748i32, desc: "Sinotai have cornered the market in filter design. Their trademarked templates are simple to print and highly efficient at capturing various gases, which can be disposed of or used elsewhere. Oxygen is a common byproduct of smelting various ores, but must be filtered of such impurities as Nitrogen using this filter and various devices, such as the Kit (Portable Scrubber)." .into(), name: "Filter (Oxygen)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Oxygen), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1055451111i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygenInfinite".into(), prefab_hash: -1055451111i32, desc: "A filter that selectively targets Oxygen. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." .into(), name: "Catalytic Filter (Oxygen)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Oxygen), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1217998945i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygenL".into(), prefab_hash: -1217998945i32, desc: "".into(), name: "Heavy Filter (Oxygen)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Oxygen), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1067319543i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterOxygenM".into(), prefab_hash: -1067319543i32, desc: "".into(), name: "Medium Filter (Oxygen)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Oxygen), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1915566057i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutants".into(), prefab_hash: 1915566057i32, desc: "Filters are used to capture various gases, such as waste emissions from a Furnace or Arc Furnace. Adding Sinotai-designed Pollutant filters to a Kit (Portable Scrubber) allows you to isolate this gas, then add it to a pipe network and employ its excellent coolant properties in a Wall Cooler. Try not to inhale." .into(), name: "Filter (Pollutant)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Pollutant), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -503738105i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutantsInfinite".into(), prefab_hash: -503738105i32, desc: "A filter that selectively targets Pollutants. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." .into(), name: "Catalytic Filter (Pollutants)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Pollutant), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1959564765i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutantsL".into(), prefab_hash: 1959564765i32, desc: "".into(), name: "Heavy Filter (Pollutants)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Pollutant), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 63677771i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterPollutantsM".into(), prefab_hash: 63677771i32, desc: "".into(), name: "Medium Filter (Pollutants)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Pollutant), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 15011598i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatiles".into(), prefab_hash: 15011598i32, desc: "Filters are used to capture various gases, which can be disposed of or used elsewhere. Volatiles are created by exposing Ice (Volatiles) to heat. The product can then be collected and combined with Oxygen to create fuel, or used within a Furnace to smelt ores and create alloys." .into(), name: "Filter (Volatiles)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Volatiles), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1916176068i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatilesInfinite".into(), prefab_hash: -1916176068i32, desc: "A filter that selectively targets Volatiles. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." .into(), name: "Catalytic Filter (Volatiles)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Volatiles), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1255156286i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatilesL".into(), prefab_hash: 1255156286i32, desc: "".into(), name: "Heavy Filter (Volatiles)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Volatiles), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1037507240i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterVolatilesM".into(), prefab_hash: 1037507240i32, desc: "".into(), name: "Medium Filter (Volatiles)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Volatiles), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1993197973i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWater".into(), prefab_hash: -1993197973i32, desc: "Sinotai filters are used to capture various gases, which can be disposed of, or used elsewhere. Water can be collected by filtering smelted Ice (Water)" .into(), name: "Filter (Water)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Steam), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1678456554i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWaterInfinite".into(), prefab_hash: -1678456554i32, desc: "A filter that selectively targets Water. It uses internal pressure differentials to regenerate a unique phase change catalyst, giving it an unlimited lifecycle." .into(), name: "Catalytic Filter (Water)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Steam), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2004969680i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWaterL".into(), prefab_hash: 2004969680i32, desc: "".into(), name: "Heavy Filter (Water)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Steam), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 8804422i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasFilterWaterM".into(), prefab_hash: 8804422i32, desc: "".into(), name: "Medium Filter (Water)".into(), }, item: ItemInfo { consumable: false, filter_type: Some(GasType::Steam), ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::GasFilter, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1717593480i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasSensor".into(), prefab_hash: 1717593480i32, desc: "".into(), name: "Kit (Gas Sensor)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2113012215i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGasTankStorage".into(), prefab_hash: -2113012215i32, desc: "This kit produces a Kit (Canister Storage) for refilling a Canister." .into(), name: "Kit (Canister Storage)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1588896491i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGlassSheets".into(), prefab_hash: 1588896491i32, desc: "A fundamental construction component, glass sheets are created from Silicon. Fabricated on the Autolathe, they are used to make {THING:StructureSolarPanel;Solar Panels}, and many other structures." .into(), name: "Glass Sheets".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1068925231i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGlasses".into(), prefab_hash: -1068925231i32, desc: "".into(), name: "Glasses".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Glasses, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 226410516i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGoldIngot".into(), prefab_hash: 226410516i32, desc: "There is an enduring paradox at the heart of the Stationeers project: An initiative conceived as \'cut-price space exploration\' uses Gold as a fundamental ingredient in fabricating so much of its equipment and materiel. " .into(), name: "Ingot (Gold)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Gold".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1348105509i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGoldOre".into(), prefab_hash: -1348105509i32, desc: "Surprisingly common throughout the Solar System, Gold is thought to originate in the heart of supernovas, gathering as dust in the early stages of solar formation, then incorporating into the slowly accreting planetary bodies. Now a prized element in Stationeer construction, Gold is valued not for its beauty, but its reliability: inert, durable, conductive and highly stable, gold\'s strength is that it does nothing." .into(), name: "Ore (Gold)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Gold".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1544275894i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemGrenade".into(), prefab_hash: 1544275894i32, desc: "Invented by the Romans, who threw Greek Fire at their enemies in ceramic jars, the word \'grenade\' is derived from the Old French word for \'pomegranate\', as many modern grenades resemble this round, many-seeded fruit. Also like many grenades before it, this one goes boom and breaks stuff." .into(), name: "Hand Grenade".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 470636008i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHEMDroidRepairKit".into(), prefab_hash: 470636008i32, desc: "Repairs damaged HEM-Droids to full health.".into(), name: "HEMDroid Repair Kit".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 374891127i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemHardBackpack".into(), prefab_hash: 374891127i32, desc: "This backpack can be useful when you are working inside and don\'t need to fly around." .into(), name: "Hardsuit Backpack".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (10u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (11u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![(LogicType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( -412551656i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemHardJetpack".into(), prefab_hash: -412551656i32, desc: "The Norsec jetpack isn\'t \'technically\' a jetpack at all, it\'s a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nThe hardsuit jetpack is capable of much higher speeds than the Jetpack Basic - up to 15m/s. Indispensable for building, mining and general movement, it has fourteen storage slots.\nUSE: \'J\' to activate; \'space\' to fly up; \'left ctrl\' to descend; and \'WASD\' to move." .into(), name: "Hardsuit Jetpack".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (10u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (11u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (12u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (13u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (14u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( 900366130i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemHardMiningBackPack".into(), prefab_hash: 900366130i32, desc: "".into(), name: "Hard Mining Backpack".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } ] .into_iter() .collect(), } .into(), ); map.insert( -1758310454i32, ItemSuitCircuitHolderTemplate { templateType: "ItemSuitCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "ItemHardSuit".into(), prefab_hash: -1758310454i32, desc: "Connects to Logic Transmitter" .into(), name: "Hardsuit".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Suit, sorting_class: SortingClass::Clothing, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 10f32 }), logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::PressureExternal, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), (LogicType::PressureSetting, MemoryAccess::ReadWrite), (LogicType::TemperatureSetting, MemoryAccess::ReadWrite), (LogicType::TemperatureExternal, MemoryAccess::Read), (LogicType::Filtration, MemoryAccess::ReadWrite), (LogicType::AirRelease, MemoryAccess::ReadWrite), (LogicType::PositionX, MemoryAccess::Read), (LogicType::PositionY, MemoryAccess::Read), (LogicType::PositionZ, MemoryAccess::Read), (LogicType::VelocityMagnitude, MemoryAccess::Read), (LogicType::VelocityRelativeX, MemoryAccess::Read), (LogicType::VelocityRelativeY, MemoryAccess::Read), (LogicType::VelocityRelativeZ, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::SoundAlert, MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::ForwardX, MemoryAccess::Read), (LogicType::ForwardY, MemoryAccess::Read), (LogicType::ForwardZ, MemoryAccess::Read), (LogicType::Orientation, MemoryAccess::Read), (LogicType::VelocityX, MemoryAccess::Read), (LogicType::VelocityY, MemoryAccess::Read), (LogicType::VelocityZ, MemoryAccess::Read), (LogicType::EntityState, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: true, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Air Tank".into(), typ : Class::GasCanister }, SlotInfo { name : "Waste Tank".into(), typ : Class::GasCanister }, SlotInfo { name : "Life Support".into(), typ : Class::Battery }, SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip }, SlotInfo { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Filter" .into(), typ : Class::GasFilter }, SlotInfo { name : "Filter".into(), typ : Class::GasFilter } ] .into_iter() .collect(), suit_info: SuitInfo { hygine_reduction_multiplier: 1.5f32, waste_max_pressure: 4053f32, }, memory: MemoryInfo { instructions: None, memory_access: MemoryAccess::ReadWrite, memory_size: 0u32, }, } .into(), ); map.insert( -84573099i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemHardsuitHelmet".into(), prefab_hash: -84573099i32, desc: "The Hardsuit Helmet is similar to the Space Helmet, but can withstand higher temperatures and pressures. It\'s perfect for enduring harsh environments like Venus and Vulcan." .into(), name: "Hardsuit Helmet".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Helmet, sorting_class: SortingClass::Clothing, }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 3f32 }), logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::Flush, MemoryAccess::Write), (LogicType::SoundAlert, MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( 1579842814i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHastelloyIngot".into(), prefab_hash: 1579842814i32, desc: "".into(), name: "Ingot (Hastelloy)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Hastelloy".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 299189339i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHat".into(), prefab_hash: 299189339i32, desc: "As the name suggests, this is a hat.".into(), name: "Hat".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Helmet, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 998653377i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHighVolumeGasCanisterEmpty".into(), prefab_hash: 998653377i32, desc: "".into(), name: "High Volume Gas Canister".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::GasCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 83f32 }), } .into(), ); map.insert( -1117581553i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemHorticultureBelt".into(), prefab_hash: -1117581553i32, desc: "".into(), name: "Horticulture Belt".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant } ] .into_iter() .collect(), } .into(), ); map.insert( -1193543727i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemHydroponicTray".into(), prefab_hash: -1193543727i32, desc: "This kits creates a Hydroponics Tray for growing various plants." .into(), name: "Kit (Hydroponic Tray)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1217489948i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIce".into(), prefab_hash: 1217489948i32, desc: "Water ice can be found on most planets in the Solar System, though not all worlds visited by Stationeers possess this resource. Highly sensitive to temperature, ice will begin to melt as soon as it is mined, unless kept in the Mining Belt. When melting, ice produces a mixture of Steam and Nitrogen gas." .into(), name: "Ice (Water)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 890106742i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIgniter".into(), prefab_hash: 890106742i32, desc: "This kit creates an Kit (Igniter) unit." .into(), name: "Kit (Igniter)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -787796599i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemInconelIngot".into(), prefab_hash: -787796599i32, desc: "".into(), name: "Ingot (Inconel)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Inconel".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 897176943i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemInsulation".into(), prefab_hash: 897176943i32, desc: "Mysterious in the extreme, the function of this item is lost to the ages." .into(), name: "Insulation".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -744098481i32, ItemLogicMemoryTemplate { templateType: "ItemLogicMemory".into(), prefab: PrefabInfo { prefab_name: "ItemIntegratedCircuit10".into(), prefab_hash: -744098481i32, desc: "".into(), name: "Integrated Circuit (IC10)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::ProgrammableChip, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::LineNumber, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), memory: MemoryInfo { instructions: None, memory_access: MemoryAccess::ReadWrite, memory_size: 512u32, }, } .into(), ); map.insert( -297990285i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemInvarIngot".into(), prefab_hash: -297990285i32, desc: "".into(), name: "Ingot (Invar)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Invar".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1225836666i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronFrames".into(), prefab_hash: 1225836666i32, desc: "".into(), name: "Iron Frames".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 30u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1301215609i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronIngot".into(), prefab_hash: -1301215609i32, desc: "The most basic unit of construction available to Stationeer-kind, iron ingots are created by smelting Ore (Iron) in the Furnace and Arc Furnace, and used to create a variety of items." .into(), name: "Ingot (Iron)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Iron".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1758427767i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronOre".into(), prefab_hash: 1758427767i32, desc: "Abundant throughout the Solar System, iron is the ore most commonly used by Stationeers constructing offworld bases. It can be smelted into both Ingot (Iron)s and Ingot (Steel)s." .into(), name: "Ore (Iron)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Iron".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -487378546i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemIronSheets".into(), prefab_hash: -487378546i32, desc: "".into(), name: "Iron Sheets".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1969189000i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemJetpackBasic".into(), prefab_hash: 1969189000i32, desc: "The basic CHAC jetpack isn\'t \'technically\' a jetpack, it\'s a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stabilizer causes the spacepack to hover when a given height is reached.\nUSE: \'J\' to activate; \'space\' to fly up; \'left ctrl\' to descend; and \'WASD\' to move." .into(), name: "Jetpack Basic".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( 496830914i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAIMeE".into(), prefab_hash: 496830914i32, desc: "".into(), name: "Kit (AIMeE)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 513258369i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAccessBridge".into(), prefab_hash: 513258369i32, desc: "".into(), name: "Kit (Access Bridge)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1431998347i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAdvancedComposter".into(), prefab_hash: -1431998347i32, desc: "".into(), name: "Kit (Advanced Composter)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -616758353i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAdvancedFurnace".into(), prefab_hash: -616758353i32, desc: "".into(), name: "Kit (Advanced Furnace)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -598545233i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAdvancedPackagingMachine".into(), prefab_hash: -598545233i32, desc: "".into(), name: "Kit (Advanced Packaging Machine)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 964043875i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAirlock".into(), prefab_hash: 964043875i32, desc: "".into(), name: "Kit (Airlock)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 682546947i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAirlockGate".into(), prefab_hash: 682546947i32, desc: "".into(), name: "Kit (Hangar Door)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -98995857i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitArcFurnace".into(), prefab_hash: -98995857i32, desc: "".into(), name: "Kit (Arc Furnace)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1222286371i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAtmospherics".into(), prefab_hash: 1222286371i32, desc: "".into(), name: "Kit (Atmospherics)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1668815415i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAutoMinerSmall".into(), prefab_hash: 1668815415i32, desc: "".into(), name: "Kit (Autominer Small)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1753893214i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAutolathe".into(), prefab_hash: -1753893214i32, desc: "".into(), name: "Kit (Autolathe)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1931958659i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitAutomatedOven".into(), prefab_hash: -1931958659i32, desc: "".into(), name: "Kit (Automated Oven)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 148305004i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBasket".into(), prefab_hash: 148305004i32, desc: "".into(), name: "Kit (Basket)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1406656973i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBattery".into(), prefab_hash: 1406656973i32, desc: "".into(), name: "Kit (Battery)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -21225041i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBatteryLarge".into(), prefab_hash: -21225041i32, desc: "".into(), name: "Kit (Battery Large)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 249073136i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBeacon".into(), prefab_hash: 249073136i32, desc: "".into(), name: "Kit (Beacon)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1241256797i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBeds".into(), prefab_hash: -1241256797i32, desc: "".into(), name: "Kit (Beds)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1755116240i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitBlastDoor".into(), prefab_hash: -1755116240i32, desc: "".into(), name: "Kit (Blast Door)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 578182956i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCentrifuge".into(), prefab_hash: 578182956i32, desc: "".into(), name: "Kit (Centrifuge)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1394008073i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitChairs".into(), prefab_hash: -1394008073i32, desc: "".into(), name: "Kit (Chairs)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1025254665i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitChute".into(), prefab_hash: 1025254665i32, desc: "".into(), name: "Kit (Basic Chutes)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -876560854i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitChuteUmbilical".into(), prefab_hash: -876560854i32, desc: "".into(), name: "Kit (Chute Umbilical)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1470820996i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCompositeCladding".into(), prefab_hash: -1470820996i32, desc: "".into(), name: "Kit (Cladding)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1182412869i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCompositeFloorGrating".into(), prefab_hash: 1182412869i32, desc: "".into(), name: "Kit (Floor Grating)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1990225489i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitComputer".into(), prefab_hash: 1990225489i32, desc: "".into(), name: "Kit (Computer)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1241851179i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitConsole".into(), prefab_hash: -1241851179i32, desc: "".into(), name: "Kit (Consoles)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 429365598i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCrate".into(), prefab_hash: 429365598i32, desc: "".into(), name: "Kit (Crate)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1585956426i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCrateMkII".into(), prefab_hash: -1585956426i32, desc: "".into(), name: "Kit (Crate Mk II)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -551612946i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCrateMount".into(), prefab_hash: -551612946i32, desc: "".into(), name: "Kit (Container Mount)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -545234195i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitCryoTube".into(), prefab_hash: -545234195i32, desc: "".into(), name: "Kit (Cryo Tube)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1935075707i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDeepMiner".into(), prefab_hash: -1935075707i32, desc: "".into(), name: "Kit (Deep Miner)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 77421200i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDockingPort".into(), prefab_hash: 77421200i32, desc: "".into(), name: "Kit (Docking Port)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 168615924i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDoor".into(), prefab_hash: 168615924i32, desc: "".into(), name: "Kit (Door)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1743663875i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDrinkingFountain".into(), prefab_hash: -1743663875i32, desc: "".into(), name: "Kit (Drinking Fountain)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1061945368i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicCanister".into(), prefab_hash: -1061945368i32, desc: "".into(), name: "Kit (Portable Gas Tank)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1533501495i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicGasTankAdvanced".into(), prefab_hash: 1533501495i32, desc: "".into(), name: "Kit (Portable Gas Tank Mk II)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -732720413i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicGenerator".into(), prefab_hash: -732720413i32, desc: "".into(), name: "Kit (Portable Generator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1861154222i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicHydroponics".into(), prefab_hash: -1861154222i32, desc: "".into(), name: "Kit (Portable Hydroponics)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 375541286i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicLiquidCanister".into(), prefab_hash: 375541286i32, desc: "".into(), name: "Kit (Portable Liquid Tank)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -638019974i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitDynamicMKIILiquidCanister".into(), prefab_hash: -638019974i32, desc: "".into(), name: "Kit (Portable Liquid Tank Mk II)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1603046970i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitElectricUmbilical".into(), prefab_hash: 1603046970i32, desc: "".into(), name: "Kit (Power Umbilical)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1181922382i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitElectronicsPrinter".into(), prefab_hash: -1181922382i32, desc: "".into(), name: "Kit (Electronics Printer)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -945806652i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitElevator".into(), prefab_hash: -945806652i32, desc: "".into(), name: "Kit (Elevator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 755302726i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEngineLarge".into(), prefab_hash: 755302726i32, desc: "".into(), name: "Kit (Engine Large)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1969312177i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEngineMedium".into(), prefab_hash: 1969312177i32, desc: "".into(), name: "Kit (Engine Medium)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 19645163i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEngineSmall".into(), prefab_hash: 19645163i32, desc: "".into(), name: "Kit (Engine Small)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1587787610i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitEvaporationChamber".into(), prefab_hash: 1587787610i32, desc: "".into(), name: "Kit (Phase Change Device)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1701764190i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFlagODA".into(), prefab_hash: 1701764190i32, desc: "".into(), name: "Kit (ODA Flag)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1168199498i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFridgeBig".into(), prefab_hash: -1168199498i32, desc: "".into(), name: "Kit (Fridge Large)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1661226524i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFridgeSmall".into(), prefab_hash: 1661226524i32, desc: "".into(), name: "Kit (Fridge Small)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -806743925i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFurnace".into(), prefab_hash: -806743925i32, desc: "".into(), name: "Kit (Furnace)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1162905029i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFurniture".into(), prefab_hash: 1162905029i32, desc: "".into(), name: "Kit (Furniture)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -366262681i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitFuselage".into(), prefab_hash: -366262681i32, desc: "".into(), name: "Kit (Fuselage)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 377745425i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGasGenerator".into(), prefab_hash: 377745425i32, desc: "".into(), name: "Kit (Gas Fuel Generator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1867280568i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGasUmbilical".into(), prefab_hash: -1867280568i32, desc: "".into(), name: "Kit (Gas Umbilical)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 206848766i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGovernedGasRocketEngine".into(), prefab_hash: 206848766i32, desc: "".into(), name: "Kit (Pumped Gas Rocket Engine)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2140672772i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGroundTelescope".into(), prefab_hash: -2140672772i32, desc: "".into(), name: "Kit (Telescope)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 341030083i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitGrowLight".into(), prefab_hash: 341030083i32, desc: "".into(), name: "Kit (Grow Light)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1022693454i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHarvie".into(), prefab_hash: -1022693454i32, desc: "".into(), name: "Kit (Harvie)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1710540039i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHeatExchanger".into(), prefab_hash: -1710540039i32, desc: "".into(), name: "Kit Heat Exchanger".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 844391171i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHorizontalAutoMiner".into(), prefab_hash: 844391171i32, desc: "".into(), name: "Kit (OGRE)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2098556089i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHydraulicPipeBender".into(), prefab_hash: -2098556089i32, desc: "".into(), name: "Kit (Hydraulic Pipe Bender)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -927931558i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHydroponicAutomated".into(), prefab_hash: -927931558i32, desc: "".into(), name: "Kit (Automated Hydroponics)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2057179799i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitHydroponicStation".into(), prefab_hash: 2057179799i32, desc: "".into(), name: "Kit (Hydroponic Station)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 288111533i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitIceCrusher".into(), prefab_hash: 288111533i32, desc: "".into(), name: "Kit (Ice Crusher)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2067655311i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedLiquidPipe".into(), prefab_hash: 2067655311i32, desc: "".into(), name: "Kit (Insulated Liquid Pipe)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 20u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 452636699i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedPipe".into(), prefab_hash: 452636699i32, desc: "".into(), name: "Kit (Insulated Pipe)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 20u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -27284803i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedPipeUtility".into(), prefab_hash: -27284803i32, desc: "".into(), name: "Kit (Insulated Pipe Utility Gas)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1831558953i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInsulatedPipeUtilityLiquid".into(), prefab_hash: -1831558953i32, desc: "".into(), name: "Kit (Insulated Pipe Utility Liquid)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1935945891i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitInteriorDoors".into(), prefab_hash: 1935945891i32, desc: "".into(), name: "Kit (Interior Doors)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 489494578i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLadder".into(), prefab_hash: 489494578i32, desc: "".into(), name: "Kit (Ladder)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1817007843i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLandingPadAtmos".into(), prefab_hash: 1817007843i32, desc: "".into(), name: "Kit (Landing Pad Atmospherics)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 293581318i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLandingPadBasic".into(), prefab_hash: 293581318i32, desc: "".into(), name: "Kit (Landing Pad Basic)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1267511065i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLandingPadWaypoint".into(), prefab_hash: -1267511065i32, desc: "".into(), name: "Kit (Landing Pad Runway)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 450164077i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLargeDirectHeatExchanger".into(), prefab_hash: 450164077i32, desc: "".into(), name: "Kit (Large Direct Heat Exchanger)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 847430620i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLargeExtendableRadiator".into(), prefab_hash: 847430620i32, desc: "".into(), name: "Kit (Large Extendable Radiator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2039971217i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLargeSatelliteDish".into(), prefab_hash: -2039971217i32, desc: "".into(), name: "Kit (Large Satellite Dish)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1854167549i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLaunchMount".into(), prefab_hash: -1854167549i32, desc: "".into(), name: "Kit (Launch Mount)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -174523552i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLaunchTower".into(), prefab_hash: -174523552i32, desc: "".into(), name: "Kit (Rocket Launch Tower)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1951126161i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidRegulator".into(), prefab_hash: 1951126161i32, desc: "".into(), name: "Kit (Liquid Regulator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -799849305i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidTank".into(), prefab_hash: -799849305i32, desc: "".into(), name: "Kit (Liquid Tank)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 617773453i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidTankInsulated".into(), prefab_hash: 617773453i32, desc: "".into(), name: "Kit (Insulated Liquid Tank)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1805020897i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidTurboVolumePump".into(), prefab_hash: -1805020897i32, desc: "".into(), name: "Kit (Turbo Volume Pump - Liquid)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1571996765i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLiquidUmbilical".into(), prefab_hash: 1571996765i32, desc: "".into(), name: "Kit (Liquid Umbilical)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 882301399i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLocker".into(), prefab_hash: 882301399i32, desc: "".into(), name: "Kit (Locker)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1512322581i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicCircuit".into(), prefab_hash: 1512322581i32, desc: "".into(), name: "Kit (IC Housing)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1997293610i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicInputOutput".into(), prefab_hash: 1997293610i32, desc: "".into(), name: "Kit (Logic I/O)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2098214189i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicMemory".into(), prefab_hash: -2098214189i32, desc: "".into(), name: "Kit (Logic Memory)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 220644373i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicProcessor".into(), prefab_hash: 220644373i32, desc: "".into(), name: "Kit (Logic Processor)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 124499454i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicSwitch".into(), prefab_hash: 124499454i32, desc: "".into(), name: "Kit (Logic Switch)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1005397063i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitLogicTransmitter".into(), prefab_hash: 1005397063i32, desc: "".into(), name: "Kit (Logic Transmitter)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -344968335i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitMotherShipCore".into(), prefab_hash: -344968335i32, desc: "".into(), name: "Kit (Mothership)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2038889137i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitMusicMachines".into(), prefab_hash: -2038889137i32, desc: "".into(), name: "Kit (Music Machines)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1752768283i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPassiveLargeRadiatorGas".into(), prefab_hash: -1752768283i32, desc: "".into(), name: "Kit (Medium Radiator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1453961898i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPassiveLargeRadiatorLiquid".into(), prefab_hash: 1453961898i32, desc: "".into(), name: "Kit (Medium Radiator Liquid)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 636112787i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPassthroughHeatExchanger".into(), prefab_hash: 636112787i32, desc: "".into(), name: "Kit (CounterFlow Heat Exchanger)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2062364768i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPictureFrame".into(), prefab_hash: -2062364768i32, desc: "".into(), name: "Kit Picture Frame".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1619793705i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipe".into(), prefab_hash: -1619793705i32, desc: "".into(), name: "Kit (Pipe)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 20u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1166461357i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeLiquid".into(), prefab_hash: -1166461357i32, desc: "".into(), name: "Kit (Liquid Pipe)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 20u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -827125300i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeOrgan".into(), prefab_hash: -827125300i32, desc: "".into(), name: "Kit (Pipe Organ)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 920411066i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeRadiator".into(), prefab_hash: 920411066i32, desc: "".into(), name: "Kit (Pipe Radiator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1697302609i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeRadiatorLiquid".into(), prefab_hash: -1697302609i32, desc: "".into(), name: "Kit (Pipe Radiator Liquid)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1934508338i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeUtility".into(), prefab_hash: 1934508338i32, desc: "".into(), name: "Kit (Pipe Utility Gas)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 595478589i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPipeUtilityLiquid".into(), prefab_hash: 595478589i32, desc: "".into(), name: "Kit (Pipe Utility Liquid)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 119096484i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPlanter".into(), prefab_hash: 119096484i32, desc: "".into(), name: "Kit (Planter)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1041148999i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPortablesConnector".into(), prefab_hash: 1041148999i32, desc: "".into(), name: "Kit (Portables Connector)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 291368213i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPowerTransmitter".into(), prefab_hash: 291368213i32, desc: "".into(), name: "Kit (Power Transmitter)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -831211676i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPowerTransmitterOmni".into(), prefab_hash: -831211676i32, desc: "".into(), name: "Kit (Power Transmitter Omni)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2015439334i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPoweredVent".into(), prefab_hash: 2015439334i32, desc: "".into(), name: "Kit (Powered Vent)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -121514007i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPressureFedGasEngine".into(), prefab_hash: -121514007i32, desc: "".into(), name: "Kit (Pressure Fed Gas Engine)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -99091572i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPressureFedLiquidEngine".into(), prefab_hash: -99091572i32, desc: "".into(), name: "Kit (Pressure Fed Liquid Engine)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 123504691i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPressurePlate".into(), prefab_hash: 123504691i32, desc: "".into(), name: "Kit (Trigger Plate)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1921918951i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitPumpedLiquidEngine".into(), prefab_hash: 1921918951i32, desc: "".into(), name: "Kit (Pumped Liquid Engine)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 750176282i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRailing".into(), prefab_hash: 750176282i32, desc: "".into(), name: "Kit (Railing)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 849148192i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRecycler".into(), prefab_hash: 849148192i32, desc: "".into(), name: "Kit (Recycler)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1181371795i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRegulator".into(), prefab_hash: 1181371795i32, desc: "".into(), name: "Kit (Pressure Regulator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1459985302i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitReinforcedWindows".into(), prefab_hash: 1459985302i32, desc: "".into(), name: "Kit (Reinforced Windows)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 724776762i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitResearchMachine".into(), prefab_hash: 724776762i32, desc: "".into(), name: "Kit Research Machine".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1574688481i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRespawnPointWallMounted".into(), prefab_hash: 1574688481i32, desc: "".into(), name: "Kit (Respawn)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1396305045i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketAvionics".into(), prefab_hash: 1396305045i32, desc: "".into(), name: "Kit (Avionics)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -314072139i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketBattery".into(), prefab_hash: -314072139i32, desc: "".into(), name: "Kit (Rocket Battery)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 479850239i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketCargoStorage".into(), prefab_hash: 479850239i32, desc: "".into(), name: "Kit (Rocket Cargo Storage)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -303008602i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketCelestialTracker".into(), prefab_hash: -303008602i32, desc: "".into(), name: "Kit (Rocket Celestial Tracker)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 721251202i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketCircuitHousing".into(), prefab_hash: 721251202i32, desc: "".into(), name: "Kit (Rocket Circuit Housing)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1256996603i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketDatalink".into(), prefab_hash: -1256996603i32, desc: "".into(), name: "Kit (Rocket Datalink)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1629347579i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketGasFuelTank".into(), prefab_hash: -1629347579i32, desc: "".into(), name: "Kit (Rocket Gas Fuel Tank)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2032027950i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketLiquidFuelTank".into(), prefab_hash: 2032027950i32, desc: "".into(), name: "Kit (Rocket Liquid Fuel Tank)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -636127860i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketManufactory".into(), prefab_hash: -636127860i32, desc: "".into(), name: "Kit (Rocket Manufactory)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -867969909i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketMiner".into(), prefab_hash: -867969909i32, desc: "".into(), name: "Kit (Rocket Miner)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1753647154i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketScanner".into(), prefab_hash: 1753647154i32, desc: "".into(), name: "Kit (Rocket Scanner)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -932335800i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRocketTransformerSmall".into(), prefab_hash: -932335800i32, desc: "".into(), name: "Kit (Transformer Small (Rocket))".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1827215803i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRoverFrame".into(), prefab_hash: 1827215803i32, desc: "".into(), name: "Kit (Rover Frame)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 197243872i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitRoverMKI".into(), prefab_hash: 197243872i32, desc: "".into(), name: "Kit (Rover Mk I)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 323957548i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSDBHopper".into(), prefab_hash: 323957548i32, desc: "".into(), name: "Kit (SDB Hopper)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 178422810i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSatelliteDish".into(), prefab_hash: 178422810i32, desc: "".into(), name: "Kit (Medium Satellite Dish)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 578078533i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSecurityPrinter".into(), prefab_hash: 578078533i32, desc: "".into(), name: "Kit (Security Printer)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1776897113i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSensor".into(), prefab_hash: -1776897113i32, desc: "".into(), name: "Kit (Sensors)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 735858725i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitShower".into(), prefab_hash: 735858725i32, desc: "".into(), name: "Kit (Shower)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 529996327i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSign".into(), prefab_hash: 529996327i32, desc: "".into(), name: "Kit (Sign)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 326752036i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSleeper".into(), prefab_hash: 326752036i32, desc: "".into(), name: "Kit (Sleeper)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1332682164i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSmallDirectHeatExchanger".into(), prefab_hash: -1332682164i32, desc: "".into(), name: "Kit (Small Direct Heat Exchanger)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1960952220i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSmallSatelliteDish".into(), prefab_hash: 1960952220i32, desc: "".into(), name: "Kit (Small Satellite Dish)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1924492105i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanel".into(), prefab_hash: -1924492105i32, desc: "".into(), name: "Kit (Solar Panel)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 844961456i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanelBasic".into(), prefab_hash: 844961456i32, desc: "".into(), name: "Kit (Solar Panel Basic)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -528695432i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanelBasicReinforced".into(), prefab_hash: -528695432i32, desc: "".into(), name: "Kit (Solar Panel Basic Heavy)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -364868685i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolarPanelReinforced".into(), prefab_hash: -364868685i32, desc: "".into(), name: "Kit (Solar Panel Heavy)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1293995736i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSolidGenerator".into(), prefab_hash: 1293995736i32, desc: "".into(), name: "Kit (Solid Generator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 969522478i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSorter".into(), prefab_hash: 969522478i32, desc: "".into(), name: "Kit (Sorter)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -126038526i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSpeaker".into(), prefab_hash: -126038526i32, desc: "".into(), name: "Kit (Speaker)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1013244511i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStacker".into(), prefab_hash: 1013244511i32, desc: "".into(), name: "Kit (Stacker)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 170878959i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStairs".into(), prefab_hash: 170878959i32, desc: "".into(), name: "Kit (Stairs)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1868555784i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStairwell".into(), prefab_hash: -1868555784i32, desc: "".into(), name: "Kit (Stairwell)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2133035682i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStandardChute".into(), prefab_hash: 2133035682i32, desc: "".into(), name: "Kit (Powered Chutes)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1821571150i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitStirlingEngine".into(), prefab_hash: -1821571150i32, desc: "".into(), name: "Kit (Stirling Engine)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1088892825i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitSuitStorage".into(), prefab_hash: 1088892825i32, desc: "".into(), name: "Kit (Suit Storage)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1361598922i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTables".into(), prefab_hash: -1361598922i32, desc: "".into(), name: "Kit (Tables)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 771439840i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTank".into(), prefab_hash: 771439840i32, desc: "".into(), name: "Kit (Tank)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1021053608i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTankInsulated".into(), prefab_hash: 1021053608i32, desc: "".into(), name: "Kit (Tank Insulated)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 529137748i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitToolManufactory".into(), prefab_hash: 529137748i32, desc: "".into(), name: "Kit (Tool Manufactory)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -453039435i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTransformer".into(), prefab_hash: -453039435i32, desc: "".into(), name: "Kit (Transformer Large)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 665194284i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTransformerSmall".into(), prefab_hash: 665194284i32, desc: "".into(), name: "Kit (Transformer Small)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1590715731i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTurbineGenerator".into(), prefab_hash: -1590715731i32, desc: "".into(), name: "Kit (Turbine Generator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1248429712i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitTurboVolumePump".into(), prefab_hash: -1248429712i32, desc: "".into(), name: "Kit (Turbo Volume Pump - Gas)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1798044015i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitUprightWindTurbine".into(), prefab_hash: -1798044015i32, desc: "".into(), name: "Kit (Upright Wind Turbine)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2038384332i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitVendingMachine".into(), prefab_hash: -2038384332i32, desc: "".into(), name: "Kit (Vending Machine)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1867508561i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitVendingMachineRefrigerated".into(), prefab_hash: -1867508561i32, desc: "".into(), name: "Kit (Vending Machine Refrigerated)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1826855889i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWall".into(), prefab_hash: -1826855889i32, desc: "".into(), name: "Kit (Wall)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 30u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1625214531i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallArch".into(), prefab_hash: 1625214531i32, desc: "".into(), name: "Kit (Arched Wall)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 30u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -846838195i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallFlat".into(), prefab_hash: -846838195i32, desc: "".into(), name: "Kit (Flat Wall)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 30u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -784733231i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallGeometry".into(), prefab_hash: -784733231i32, desc: "".into(), name: "Kit (Geometric Wall)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 30u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -524546923i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallIron".into(), prefab_hash: -524546923i32, desc: "".into(), name: "Kit (Iron Wall)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 30u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -821868990i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWallPadded".into(), prefab_hash: -821868990i32, desc: "".into(), name: "Kit (Padded Wall)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 30u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 159886536i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWaterBottleFiller".into(), prefab_hash: 159886536i32, desc: "".into(), name: "Kit (Water Bottle Filler)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 611181283i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWaterPurifier".into(), prefab_hash: 611181283i32, desc: "".into(), name: "Kit (Water Purifier)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 337505889i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWeatherStation".into(), prefab_hash: 337505889i32, desc: "".into(), name: "Kit (Weather Station)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -868916503i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWindTurbine".into(), prefab_hash: -868916503i32, desc: "".into(), name: "Kit (Wind Turbine)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1779979754i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemKitWindowShutter".into(), prefab_hash: 1779979754i32, desc: "".into(), name: "Kit (Window Shutter)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -743968726i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemLabeller".into(), prefab_hash: -743968726i32, desc: "A labeller lets you set names and values on a variety of devices and structures, including Console and Logic." .into(), name: "Labeller".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 141535121i32, ItemCircuitHolderTemplate { templateType: "ItemCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "ItemLaptop".into(), prefab_hash: 141535121i32, desc: "The Laptop functions as a portable IC editor. To operate the Laptop it must be powered with a battery, have a IC Editor Motherboard in the motherboard slot, and an Integrated Circuit (IC10) in the Programmable Chip Slot.\n\nYou must place the laptop down to interact with the onsreen UI.\n \nConnects to Logic Transmitter" .into(), name: "Laptop".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::PressureExternal, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::TemperatureExternal, MemoryAccess::Read), (LogicType::PositionX, MemoryAccess::Read), (LogicType::PositionY, MemoryAccess::Read), (LogicType::PositionZ, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: true, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip }, SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Motherboard".into(), typ : Class::Motherboard } ] .into_iter() .collect(), } .into(), ); map.insert( 2134647745i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLeadIngot".into(), prefab_hash: 2134647745i32, desc: "".into(), name: "Ingot (Lead)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Lead".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -190236170i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLeadOre".into(), prefab_hash: -190236170i32, desc: "Lead is a chemical element with the symbol \"Pb\". It is a dense, heavy metal with a low melting point. Lead is a used to make a variety of things such as alloys like Ingot (Solder) and munitions." .into(), name: "Ore (Lead)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Lead".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1949076595i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLightSword".into(), prefab_hash: 1949076595i32, desc: "A charming, if useless, pseudo-weapon. (Creative only.)".into(), name: "Light Sword".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -185207387i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidCanisterEmpty".into(), prefab_hash: -185207387i32, desc: "".into(), name: "Liquid Canister".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::LiquidCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.05f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 12.1f32, }), } .into(), ); map.insert( 777684475i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidCanisterSmart".into(), prefab_hash: 777684475i32, desc: "0.Mode0\n1.Mode1".into(), name: "Liquid Canister (Smart)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::LiquidCanister, sorting_class: SortingClass::Atmospherics, }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 18.1f32, }), } .into(), ); map.insert( 2036225202i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidDrain".into(), prefab_hash: 2036225202i32, desc: "".into(), name: "Kit (Liquid Drain)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 226055671i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeAnalyzer".into(), prefab_hash: 226055671i32, desc: "".into(), name: "Kit (Liquid Pipe Analyzer)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -248475032i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeHeater".into(), prefab_hash: -248475032i32, desc: "Creates a Pipe Heater (Liquid)." .into(), name: "Pipe Heater Kit (Liquid)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2126113312i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeValve".into(), prefab_hash: -2126113312i32, desc: "This kit creates a Liquid Valve." .into(), name: "Kit (Liquid Pipe Valve)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2106280569i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidPipeVolumePump".into(), prefab_hash: -2106280569i32, desc: "".into(), name: "Kit (Liquid Volume Pump)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2037427578i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemLiquidTankStorage".into(), prefab_hash: 2037427578i32, desc: "This kit produces a Kit (Liquid Canister Storage) for refilling a Liquid Canister." .into(), name: "Kit (Liquid Canister Storage)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 240174650i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIAngleGrinder".into(), prefab_hash: 240174650i32, desc: "Angles-be-gone with the trusty angle grinder. The MK II is more resistant to temperature and pressure." .into(), name: "Mk II Angle Grinder".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -2061979347i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIArcWelder".into(), prefab_hash: -2061979347i32, desc: "".into(), name: "Mk II Arc Welder".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 1440775434i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIICrowbar".into(), prefab_hash: 1440775434i32, desc: "Recurso\'s entry-level crowbar is useful in a variety of everyday Stationeer settings, from opening Area Power Controls and unpowered Airlocks, to splatting pan-dimensional headcrabs, should the need arise. The MK II is more resistant to temperature and pressure." .into(), name: "Mk II Crowbar".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 324791548i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIDrill".into(), prefab_hash: 324791548i32, desc: "The ExMin Off-whirled Hand Drill has been a companion to Stationeers for decades. Essential for assembling and deconstructing various items and structures, regardless of gravity, pressure or temperature." .into(), name: "Mk II Drill".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 388774906i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIDuctTape".into(), prefab_hash: 388774906i32, desc: "In the distant past, one of Earth\'s great champions taught a generation of \'Fix-It People\' that duct tape was the answer to any problem. Stationeers have demonstrated that this is truth holds strong, so long as the problem is a damaged Eva Suit, Jetpack Basic, Space Helmet, or even a Solar Panel.\nTo use on yourself: put duct tape in your active hand, hold RIGHT MOUSE BUTTON to automatically repair damage." .into(), name: "Mk II Duct Tape".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1875271296i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIMiningDrill".into(), prefab_hash: -1875271296i32, desc: "The handheld \'Topo\' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, \'The Topo don\'t stopo.\' The MK II is more resistant to temperature and pressure." .into(), name: "Mk II Mining Drill".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Default".into()), (1u32, "Flatten".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -2015613246i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIScrewdriver".into(), prefab_hash: -2015613246i32, desc: "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It\'s definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units. The MK II is more resistant to temperature and pressure." .into(), name: "Mk II Screwdriver".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -178893251i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIWireCutters".into(), prefab_hash: -178893251i32, desc: "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools." .into(), name: "Mk II Wire Cutters".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1862001680i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMKIIWrench".into(), prefab_hash: 1862001680i32, desc: "One of humanity\'s enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures The MK II is more resistant to temperature and pressure." .into(), name: "Mk II Wrench".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1399098998i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMarineBodyArmor".into(), prefab_hash: 1399098998i32, desc: "".into(), name: "Marine Armor".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Suit, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( 1073631646i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMarineHelmet".into(), prefab_hash: 1073631646i32, desc: "".into(), name: "Marine Helmet".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Helmet, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 1327248310i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMilk".into(), prefab_hash: 1327248310i32, desc: "Full disclosure, it\'s not actually \'milk\', but an Agrizero-invented synthesis of 5ml Soy Oil and 5g Fern, delicately blended in the Chemistry Station. Surprisingly filling, it can be used as an ingredient to cook other food in the Microwave or Automated Oven. Think, Muffin." .into(), name: "Milk".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some(vec![("Milk".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1650383245i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMiningBackPack".into(), prefab_hash: -1650383245i32, desc: "".into(), name: "Mining Backpack".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } ] .into_iter() .collect(), } .into(), ); map.insert( -676435305i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMiningBelt".into(), prefab_hash: -676435305i32, desc: "Originally developed by Recurso Espaciais for asteroid mining, the Stationeer\'s mining belt has room for two tools and eight ore stacks. While wearing the belt, ore is automatically stored there when mined. Volatile and temperature-dependent remain stable in the environmentally controlled unit." .into(), name: "Mining Belt".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } ] .into_iter() .collect(), } .into(), ); map.insert( 1470787934i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMiningBeltMKII".into(), prefab_hash: 1470787934i32, desc: "A larger and more capacious mining belt, the Mk II is similar to the Mining Belt, but has 13 slots instead of the basic 8, to increase the length of your mining trips. It also has space for two tools. " .into(), name: "Mining Belt MK II".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (10u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (11u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (12u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (13u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (14u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![(LogicType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } ] .into_iter() .collect(), } .into(), ); map.insert( 15829510i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMiningCharge".into(), prefab_hash: 15829510i32, desc: "A low cost, high yield explosive with a 10 second timer.".into(), name: "Mining Charge".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1055173191i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMiningDrill".into(), prefab_hash: 1055173191i32, desc: "The handheld \'Topo\' tri-cone rotary mining drill was made for one thing: quick digging. Modeled on a classic Recurso zero-g design, it functions equally well in vacuum and atmosphere, with cemented carbide bits to increase resilience and bearing life, and reduce spalling. As Jenk Murtons once said, \'The Topo don\'t stopo.\'" .into(), name: "Mining Drill".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Default".into()), (1u32, "Flatten".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -1663349918i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMiningDrillHeavy".into(), prefab_hash: -1663349918i32, desc: "Sometimes mining trips require something a little bigger to bring home the goods. This scaled up version of the Recurso \'Topo\' design Mining Drill can literally move mountains. The heavy mining drill will remove more ground and mine ore more quickly than the standard mining drill. The heavy mining drill is also resilient to temperature and pressure. So no matter what planet or extreme weather conditions may be present, the Recurso heavy mining drill will get the job done." .into(), name: "Mining Drill (Heavy)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Default".into()), (1u32, "Flatten".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 1258187304i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemMiningDrillPneumatic".into(), prefab_hash: 1258187304i32, desc: "0.Default\n1.Flatten".into(), name: "Pneumatic Mining Drill".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } ] .into_iter() .collect(), } .into(), ); map.insert( 1467558064i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemMkIIToolbelt".into(), prefab_hash: 1467558064i32, desc: "A large, ten-slot tool belt with two extra generic slots for carrying whatever takes your fancy." .into(), name: "Tool Belt MK II".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (10u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (11u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![(LogicType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( -1864982322i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMuffin".into(), prefab_hash: -1864982322i32, desc: "A delicious, semi-healthful snack, nothing comforts a Stationeer 800 million kilometers from home like a hand-made muffin." .into(), name: "Muffin".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2044798572i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemMushroom".into(), prefab_hash: 2044798572i32, desc: "A tasty food item. Unlike normal plants, it consumes Oxygen and outputs Carbon Dioxide. Mushrooms will only mature at a moderate rate in darkness, and prolonged light will kill it." .into(), name: "Mushroom".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 20u32, reagents: Some(vec![("Mushroom".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 982514123i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemNVG".into(), prefab_hash: 982514123i32, desc: "".into(), name: "Night Vision Goggles".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Glasses, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -1406385572i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemNickelIngot".into(), prefab_hash: -1406385572i32, desc: "".into(), name: "Ingot (Nickel)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Nickel".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1830218956i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemNickelOre".into(), prefab_hash: 1830218956i32, desc: "Nickel is a chemical element with the symbol \"Ni\" and is a rare metal commonly used as a plating to prevent corrosion. Sought after by many Stationeers, Nickel is also commonly used to create several alloys." .into(), name: "Ore (Nickel)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Nickel".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1499471529i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemNitrice".into(), prefab_hash: -1499471529i32, desc: "Nitrice is the nickname given to solid Nitrogen Ice, and found on many planets and moons in the Solar System. Given the inert nature of the Nitrogen it produces, the ice is useful when making breathable atmospheres with low flammability.\n\nHighly sensitive to temperature, nitrice will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small." .into(), name: "Ice (Nitrice)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1805394113i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemOxite".into(), prefab_hash: -1805394113i32, desc: "Oxite ice is largely composed of frozen Oxygen, and found on many planets in the Solar System. Highly valuable and sought after, not all planets a Stationeer visits will have some. \n\nHighly sensitive to temperature, oxite will begin to melt as soon as it is mined, unless the temperature is below zero, or it is stored in the Mining Belt, Mining Belt MK II or devices like the Ice Crusher or Fridge Small. When melting, oxite produces a mixture of Oxygen and Nitrogen." .into(), name: "Ice (Oxite)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 238631271i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPassiveVent".into(), prefab_hash: 238631271i32, desc: "This kit creates a Passive Vent among other variants." .into(), name: "Passive Vent".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1397583760i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPassiveVentInsulated".into(), prefab_hash: -1397583760i32, desc: "".into(), name: "Kit (Insulated Passive Vent)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2042955224i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPeaceLily".into(), prefab_hash: 2042955224i32, desc: "A fetching lily with greater resistance to cold temperatures." .into(), name: "Peace Lily".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -913649823i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPickaxe".into(), prefab_hash: -913649823i32, desc: "When the sun sets and the Mining Drill runs dead, its batteries drained and your Solar Panel cold and lifeless, the Autolathe empty, the way forward unclear, one thing holds back the endless night of defeat: the trusty pickaxe." .into(), name: "Pickaxe".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1118069417i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPillHeal".into(), prefab_hash: 1118069417i32, desc: "Three centuries of pharmaceutical technology compressed into one small, easy to ingest pill: the Heal Pill, aka the Proton Pill, aka Mr Happy contains active enzymes, therapeutic proteins, modified microbial strains, and mammalian cell line analogues in a single-dose boost of high purity, efficacy, and potency that potentiates a swift parasympathetic immune response." .into(), name: "Pill (Medical)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 418958601i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPillStun".into(), prefab_hash: 418958601i32, desc: "Through rarely publicized, the existence of this pill is an open secret. For use when all else has failed, the Sayonara Suppository immobilizes and rapidly ends the average Stationeer. The delivery mode ensures that if a Stationeer chooses to take this pill, they really have to want it." .into(), name: "Pill (Paralysis)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -767597887i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeAnalyizer".into(), prefab_hash: -767597887i32, desc: "This kit creates a Pipe Analyzer." .into(), name: "Kit (Pipe Analyzer)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -38898376i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeCowl".into(), prefab_hash: -38898376i32, desc: "This creates a Pipe Cowl that can be placed on the end of pipes to expose them to the world atmospheres." .into(), name: "Pipe Cowl".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 20u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1532448832i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeDigitalValve".into(), prefab_hash: -1532448832i32, desc: "This kit creates a Digital Valve." .into(), name: "Kit (Digital Valve)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1134459463i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeGasMixer".into(), prefab_hash: -1134459463i32, desc: "This kit creates a Gas Mixer." .into(), name: "Kit (Gas Mixer)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1751627006i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeHeater".into(), prefab_hash: -1751627006i32, desc: "Creates a Pipe Heater (Gas)." .into(), name: "Pipe Heater Kit (Gas)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1366030599i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeIgniter".into(), prefab_hash: 1366030599i32, desc: "".into(), name: "Kit (Pipe Igniter)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 391769637i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeLabel".into(), prefab_hash: 391769637i32, desc: "This kit creates a Pipe Label." .into(), name: "Kit (Pipe Label)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 20u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -906521320i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeLiquidRadiator".into(), prefab_hash: -906521320i32, desc: "This kit creates a Liquid Pipe Convection Radiator." .into(), name: "Kit (Liquid Radiator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1207939683i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeMeter".into(), prefab_hash: 1207939683i32, desc: "This kit creates a Pipe Meter." .into(), name: "Kit (Pipe Meter)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1796655088i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeRadiator".into(), prefab_hash: -1796655088i32, desc: "This kit creates a Pipe Convection Radiator." .into(), name: "Kit (Radiator)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 799323450i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeValve".into(), prefab_hash: 799323450i32, desc: "This kit creates a Valve." .into(), name: "Kit (Pipe Valve)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1766301997i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPipeVolumePump".into(), prefab_hash: -1766301997i32, desc: "This kit creates a Volume Pump." .into(), name: "Kit (Volume Pump)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1108244510i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlainCake".into(), prefab_hash: -1108244510i32, desc: "".into(), name: "Cake".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1159179557i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantEndothermic_Creative".into(), prefab_hash: -1159179557i32, desc: "".into(), name: "Endothermic Plant Creative".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 851290561i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantEndothermic_Genepool1".into(), prefab_hash: 851290561i32, desc: "Agrizero\'s Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings, when supplied with sufficient Nitrogen. The alpha variant has a peak cooling and electrolysis capacity of 90Watts and is most efficient operating in air temperatures of 0 to 40 Degrees Celsius." .into(), name: "Winterspawn (Alpha variant)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1414203269i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantEndothermic_Genepool2".into(), prefab_hash: -1414203269i32, desc: "Agrizero\'s Winterspawn atmospheric bio-processor is a recent addition to their catalog of genespliced environmental decorations. Using ambient heat to split Water into Volatiles and Oxygen, the Winterspawn cools its surroundings when supplied with sufficient Nitrogen. The beta variant has a peak cooling and electrolysis capacity of 150Watts and is most efficient operating in air temperatures of 14 to 24 Degrees Celsius." .into(), name: "Winterspawn (Beta variant)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 173023800i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemPlantSampler".into(), prefab_hash: 173023800i32, desc: "The Plant Sampler allows you to take a gene sample of a growing plant. The sampler can then be placed in the Plant Genetic Analyzer to attain and interpret the results." .into(), name: "Plant Sampler".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -532672323i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantSwitchGrass".into(), prefab_hash: -532672323i32, desc: "".into(), name: "Switch Grass".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1208890208i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantThermogenic_Creative".into(), prefab_hash: -1208890208i32, desc: "".into(), name: "Thermogenic Plant Creative".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -177792789i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantThermogenic_Genepool1".into(), prefab_hash: -177792789i32, desc: "The Agrizero\'s-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant." .into(), name: "Hades Flower (Alpha strain)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1819167057i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlantThermogenic_Genepool2".into(), prefab_hash: 1819167057i32, desc: "The Agrizero\'s-created Hades Flower is the result of as dubious experiment to combine the allure of tropical plants with the comfort and homeliness of a heat pump. The plant breathes a 1:3 mix of Volatiles and Oxygen, and exhales heated Pollutant. The beta strain is notably more efficient than the earlier, more experimental alpha variant." .into(), name: "Hades Flower (Beta strain)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 662053345i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPlasticSheets".into(), prefab_hash: 662053345i32, desc: "".into(), name: "Plastic Sheets".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1929046963i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPotato".into(), prefab_hash: 1929046963i32, desc: " Potatoes are a simple, fast growing crop that can keep Stationeers alive in emergencies." .into(), name: "Potato".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 20u32, reagents: Some(vec![("Potato".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2111886401i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPotatoBaked".into(), prefab_hash: -2111886401i32, desc: "".into(), name: "Baked Potato".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 1u32, reagents: Some(vec![("Potato".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 839924019i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPowerConnector".into(), prefab_hash: 839924019i32, desc: "This kit creates a Power Connector." .into(), name: "Kit (Power Connector)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1277828144i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPumpkin".into(), prefab_hash: 1277828144i32, desc: "Pumpkins are a perennial plant, with both a long growth time, and a long time between harvests. Its low requirement for darkness allows for accelerated growing if provided with extra light." .into(), name: "Pumpkin".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 20u32, reagents: Some(vec![("Pumpkin".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 62768076i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPumpkinPie".into(), prefab_hash: 62768076i32, desc: "".into(), name: "Pumpkin Pie".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1277979876i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPumpkinSoup".into(), prefab_hash: 1277979876i32, desc: "Made using Cooked Pumpkin and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine. Fairly high in nutrition, canned food does not decay" .into(), name: "Pumpkin Soup".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1616308158i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIce".into(), prefab_hash: -1616308158i32, desc: "A frozen chunk of pure Water" .into(), name: "Pure Ice Water".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1251009404i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceCarbonDioxide".into(), prefab_hash: -1251009404i32, desc: "A frozen chunk of pure Carbon Dioxide" .into(), name: "Pure Ice Carbon Dioxide".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 944530361i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceHydrogen".into(), prefab_hash: 944530361i32, desc: "A frozen chunk of pure Hydrogen" .into(), name: "Pure Ice Hydrogen".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1715945725i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidCarbonDioxide".into(), prefab_hash: -1715945725i32, desc: "A frozen chunk of pure Liquid Carbon Dioxide" .into(), name: "Pure Ice Liquid Carbon Dioxide".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1044933269i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidHydrogen".into(), prefab_hash: -1044933269i32, desc: "A frozen chunk of pure Liquid Hydrogen" .into(), name: "Pure Ice Liquid Hydrogen".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1674576569i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidNitrogen".into(), prefab_hash: 1674576569i32, desc: "A frozen chunk of pure Liquid Nitrogen" .into(), name: "Pure Ice Liquid Nitrogen".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1428477399i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidNitrous".into(), prefab_hash: 1428477399i32, desc: "A frozen chunk of pure Liquid Nitrous Oxide" .into(), name: "Pure Ice Liquid Nitrous".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 541621589i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidOxygen".into(), prefab_hash: 541621589i32, desc: "A frozen chunk of pure Liquid Oxygen" .into(), name: "Pure Ice Liquid Oxygen".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1748926678i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidPollutant".into(), prefab_hash: -1748926678i32, desc: "A frozen chunk of pure Liquid Pollutant" .into(), name: "Pure Ice Liquid Pollutant".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1306628937i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceLiquidVolatiles".into(), prefab_hash: -1306628937i32, desc: "A frozen chunk of pure Liquid Volatiles" .into(), name: "Pure Ice Liquid Volatiles".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1708395413i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceNitrogen".into(), prefab_hash: -1708395413i32, desc: "A frozen chunk of pure Nitrogen" .into(), name: "Pure Ice Nitrogen".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 386754635i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceNitrous".into(), prefab_hash: 386754635i32, desc: "A frozen chunk of pure Nitrous Oxide" .into(), name: "Pure Ice NitrousOxide".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1150448260i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceOxygen".into(), prefab_hash: -1150448260i32, desc: "A frozen chunk of pure Oxygen" .into(), name: "Pure Ice Oxygen".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1755356i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIcePollutant".into(), prefab_hash: -1755356i32, desc: "A frozen chunk of pure Pollutant" .into(), name: "Pure Ice Pollutant".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2073202179i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIcePollutedWater".into(), prefab_hash: -2073202179i32, desc: "A frozen chunk of Polluted Water" .into(), name: "Pure Ice Polluted Water".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -874791066i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceSteam".into(), prefab_hash: -874791066i32, desc: "A frozen chunk of pure Steam" .into(), name: "Pure Ice Steam".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -633723719i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemPureIceVolatiles".into(), prefab_hash: -633723719i32, desc: "A frozen chunk of pure Volatiles" .into(), name: "Pure Ice Volatiles".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 495305053i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRTG".into(), prefab_hash: 495305053i32, desc: "This kit creates that miracle of modern science, a Kit (Creative RTG)." .into(), name: "Kit (Creative RTG)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1817645803i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRTGSurvival".into(), prefab_hash: 1817645803i32, desc: "This kit creates a Kit (RTG)." .into(), name: "Kit (RTG)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1641500434i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemReagentMix".into(), prefab_hash: -1641500434i32, desc: "Reagent mix is pure potential. A slurry of undifferentiated ores, it is output by the Recycler and can be fed into the Centrifuge to separate and recover the individual materials. Reagent mix is also output by the Furnace when the current contents are ejected without smelting a specific ingot." .into(), name: "Reagent Mix".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 678483886i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemRemoteDetonator".into(), prefab_hash: 678483886i32, desc: "".into(), name: "Remote Detonator".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -1773192190i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemReusableFireExtinguisher".into(), prefab_hash: -1773192190i32, desc: "Requires a canister filled with any inert liquid to opperate." .into(), name: "Fire Extinguisher (Reusable)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } ] .into_iter() .collect(), } .into(), ); map.insert( 658916791i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRice".into(), prefab_hash: 658916791i32, desc: "Rice grows at a moderate rate as long as its supplied with plenty of water. Being more dependant on water, rice plants can easily die during periods of drought." .into(), name: "Rice".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Rice".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 871811564i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRoadFlare".into(), prefab_hash: 871811564i32, desc: "Designed to burn anywhere in the Solar System, the EZC magnesium fusee supplies its own oxygen to fuel combustion, and dispel the eternal night of space." .into(), name: "Road Flare".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 20u32, reagents: None, slot_class: Class::Flare, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2109945337i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHead".into(), prefab_hash: 2109945337i32, desc: "Replaceable drill head for Rocket Miner" .into(), name: "Mining-Drill Head (Basic)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1530764483i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadDurable".into(), prefab_hash: 1530764483i32, desc: "".into(), name: "Mining-Drill Head (Durable)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 653461728i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadHighSpeedIce".into(), prefab_hash: 653461728i32, desc: "".into(), name: "Mining-Drill Head (High Speed Ice)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1440678625i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadHighSpeedMineral".into(), prefab_hash: 1440678625i32, desc: "".into(), name: "Mining-Drill Head (High Speed Mineral)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -380904592i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadIce".into(), prefab_hash: -380904592i32, desc: "".into(), name: "Mining-Drill Head (Ice)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -684020753i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadLongTerm".into(), prefab_hash: -684020753i32, desc: "".into(), name: "Mining-Drill Head (Long Term)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1083675581i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketMiningDrillHeadMineral".into(), prefab_hash: 1083675581i32, desc: "".into(), name: "Mining-Drill Head (Mineral)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::DrillHead, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1198702771i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemRocketScanningHead".into(), prefab_hash: -1198702771i32, desc: "".into(), name: "Rocket Scanner Head".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::ScanningHead, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1661270830i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemScanner".into(), prefab_hash: 1661270830i32, desc: "A mysterious piece of technology, rumored to have Zrillian origins." .into(), name: "Handheld Scanner".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 687940869i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemScrewdriver".into(), prefab_hash: 687940869i32, desc: "This standard issue frictional adherence adjustor is a top of the line, bi-rotational model with a columnated uni-grip. It\'s definitely not just a screwdriver. Use it for construction and deconstruction of certain kits, and setting values on logic units." .into(), name: "Screwdriver".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1981101032i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSecurityCamera".into(), prefab_hash: -1981101032i32, desc: "Security cameras can be paired with a Motion Sensor, then connected to a Console fitted with a Camera Display for that \'always watched\' feeling." .into(), name: "Security Camera".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1176140051i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemSensorLenses".into(), prefab_hash: -1176140051i32, desc: "These Norsec glasses might not be the most fashionable thing, but when a Sensor Processing Unit (Ore Scanner) is inserted, Stationeers can use these handy glasses to x-ray the ground and find ores that are hidden beneath the surface." .into(), name: "Sensor Lenses".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Glasses, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Sensor Processing Unit".into(), typ : Class::SensorProcessingUnit } ] .into_iter() .collect(), } .into(), ); map.insert( -1154200014i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSensorProcessingUnitCelestialScanner".into(), prefab_hash: -1154200014i32, desc: "".into(), name: "Sensor Processing Unit (Celestial Scanner)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::SensorProcessingUnit, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1730464583i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSensorProcessingUnitMesonScanner".into(), prefab_hash: -1730464583i32, desc: "The T-Ray Scanner Sensor Processing Unit can be inserted into the Sensor Lenses to show an overlay of pipes and cables. This can be useful when building behind walls or other structures." .into(), name: "Sensor Processing Unit (T-Ray Scanner)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::SensorProcessingUnit, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1219128491i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSensorProcessingUnitOreScanner".into(), prefab_hash: -1219128491i32, desc: "The Sensor Processing unit can be inserted into Sensor Lenses to reveal underground minerals in a HUD." .into(), name: "Sensor Processing Unit (Ore Scanner)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::SensorProcessingUnit, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -290196476i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSiliconIngot".into(), prefab_hash: -290196476i32, desc: "".into(), name: "Ingot (Silicon)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Silicon".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1103972403i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSiliconOre".into(), prefab_hash: 1103972403i32, desc: "Silicon is a chemical element with the symbol \"Si\" and is one of the most useful elements to Stationeers. Readily available throughout the universe, silicon is used in a range of alloys, glass, plastics and various electronic components a Stationeer may need to complete their mission." .into(), name: "Ore (Silicon)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Silicon".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -929742000i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSilverIngot".into(), prefab_hash: -929742000i32, desc: "".into(), name: "Ingot (Silver)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Silver".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -916518678i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSilverOre".into(), prefab_hash: -916518678i32, desc: "Silver is a chemical element with the symbol \"Ag\". Valued by many Stationeers for its attractive luster and sheen, it is also used in a variety of electronics components and alloys." .into(), name: "Ore (Silver)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Silver".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -82508479i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSolderIngot".into(), prefab_hash: -82508479i32, desc: "".into(), name: "Ingot (Solder)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Solder".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -365253871i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSolidFuel".into(), prefab_hash: -365253871i32, desc: "".into(), name: "Solid Fuel (Hydrocarbon)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Hydrocarbon".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1883441704i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeBass".into(), prefab_hash: -1883441704i32, desc: "".into(), name: "Sound Cartridge Bass".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::SoundCartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1901500508i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeDrums".into(), prefab_hash: -1901500508i32, desc: "".into(), name: "Sound Cartridge Drums".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::SoundCartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1174735962i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeLeads".into(), prefab_hash: -1174735962i32, desc: "".into(), name: "Sound Cartridge Leads".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::SoundCartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1971419310i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoundCartridgeSynth".into(), prefab_hash: -1971419310i32, desc: "".into(), name: "Sound Cartridge Synth".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::SoundCartridge, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1387403148i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoyOil".into(), prefab_hash: 1387403148i32, desc: "".into(), name: "Soy Oil".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some(vec![("Oil".into(), 1f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1924673028i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSoybean".into(), prefab_hash: 1924673028i32, desc: " Soybeans grow at a moderate rate, but require atmospheric Nitrogen to grow. Its main use is to create Soy Oil" .into(), name: "Soybean".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some(vec![("Soy".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1737666461i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceCleaner".into(), prefab_hash: -1737666461i32, desc: "There was a time when humanity really wanted to keep space clean. That time has passed." .into(), name: "Space Cleaner".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 714830451i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceHelmet".into(), prefab_hash: 714830451i32, desc: "The basic space helmet insulates Stationeers against everything from hard vacuum to weird cooking smells. Providing a pressure-controlled, breathable atmosphere, it comes with a built-in light powered by your Eva Suit Battery Cell (Small).\nIt also incorporates a lock/unlock feature to avoid accidental opening, as well as a flush function to expel and replace the internal atmosphere. If damaged, use Duct Tape to fix it, or paint it any color you like using the Paint Mixer." .into(), name: "Space Helmet".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Helmet, sorting_class: SortingClass::Clothing, }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: Some(InternalAtmoInfo { volume: 3f32 }), logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::Flush, MemoryAccess::Write), (LogicType::SoundAlert, MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( 675686937i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceIce".into(), prefab_hash: 675686937i32, desc: "".into(), name: "Space Ice".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2131916219i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSpaceOre".into(), prefab_hash: 2131916219i32, desc: "Ore mined from asteroids via the Rocket Miner which then must be processed in the Centrifuge, or Combustion Centrifuge to produce smeltable ores." .into(), name: "Dirty Ore".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 100u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1260618380i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemSpacepack".into(), prefab_hash: -1260618380i32, desc: "The basic CHAC spacepack isn\'t \'technically\' a jetpack, it\'s a gas thruster. It can be powered by any gas, so long as the internal pressure of the canister is higher than the ambient external pressure. If the external pressure is greater, the spacepack will not function.\nIndispensable for building, mining and general movement, it has ten storage slots and lets Stationeers fly at 3m/s, compared to the more powerful Jetpack Basic or Hardsuit Jetpack. Adjusting the thrust value alters your rate of acceleration, while activating the stablizer causes the spacepack to hover when a given height is reached.\nUSE: \'J\' to activate; \'space\' to fly up; \'left ctrl\' to descend; and \'WASD\' to move." .into(), name: "Spacepack".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Back, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Propellant".into(), typ : Class::GasCanister }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( -688107795i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanBlack".into(), prefab_hash: -688107795i32, desc: "Go classic, clandestine or just plain Gothic with black paint, which can be applied to most items. Each can has 20 uses." .into(), name: "Spray Paint (Black)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -498464883i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanBlue".into(), prefab_hash: -498464883i32, desc: "What kind of a color is blue? The kind of of color that says, \'Hey, what about me?\'" .into(), name: "Spray Paint (Blue)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 845176977i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanBrown".into(), prefab_hash: 845176977i32, desc: "In more artistic Stationeers circles, the absence of brown is often lamented, but seldom changed." .into(), name: "Spray Paint (Brown)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1880941852i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanGreen".into(), prefab_hash: -1880941852i32, desc: "Green is the color of life, and longing. Paradoxically, it\'s also the color of envy, and tolerance. It denotes sickness, youth, and wealth. But really, it\'s just what light does at around 500 billionths of a meter." .into(), name: "Spray Paint (Green)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1645266981i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanGrey".into(), prefab_hash: -1645266981i32, desc: "Arguably the most popular color in the universe, grey was invented so designers had something to do." .into(), name: "Spray Paint (Grey)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1918456047i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanKhaki".into(), prefab_hash: 1918456047i32, desc: "Not so much a single color, as a category of boredom, khaki is the pigmentation equivalent of a mild depressive episode." .into(), name: "Spray Paint (Khaki)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -158007629i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanOrange".into(), prefab_hash: -158007629i32, desc: "Orange is fun, but also suggestive of hazards. Sitting proudly in the middle of the visual spectrum, it has nothing to prove." .into(), name: "Spray Paint (Orange)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1344257263i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanPink".into(), prefab_hash: 1344257263i32, desc: "With the invention of enduring chemical dyes, the 20th century bestowed associations with innocence and tenderness upon this pale tint of red. Yet classically, it was the color of seduction and eroticism. Things change." .into(), name: "Spray Paint (Pink)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 30686509i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanPurple".into(), prefab_hash: 30686509i32, desc: "Purple is a curious color. You need to be careful with purple. It can be very good, or go horribly, horribly wrong." .into(), name: "Spray Paint (Purple)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1514393921i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanRed".into(), prefab_hash: 1514393921i32, desc: "The king of colors, red is perhaps the defining tone of the universe. Linked to blood, royalty, fire and damnation, it is the chromatic expression of power." .into(), name: "Spray Paint (Red)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 498481505i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanWhite".into(), prefab_hash: 498481505i32, desc: "White looks clean, sharp and nice. But Stationeering can be a dirty job. White tends to scuff." .into(), name: "Spray Paint (White)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 995468116i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSprayCanYellow".into(), prefab_hash: 995468116i32, desc: "A caricature of light itself, yellow lacks the self-confidence of red, or the swagger of purple. It\'s less fun than orange, but less emotionally limp than khaki. It\'s hard to know when yellow is appropriate, but it persists as a primary color regardless. Suggesting that yellow gonna yellow, no matter what anyone thinks." .into(), name: "Spray Paint (Yellow)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Bottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1289723966i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemSprayGun".into(), prefab_hash: 1289723966i32, desc: "Use with Spray cans in the Spray Can to paint structures, cables and pipes. Much more efficient and faster than doing it with individual spray cans." .into(), name: "Spray Gun".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Spray Can".into(), typ : Class::Bottle }] .into_iter() .collect(), } .into(), ); map.insert( -1448105779i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSteelFrames".into(), prefab_hash: -1448105779i32, desc: "An advanced and stronger version of Iron Frames, steel frames are placed by right-clicking. To complete construction, use Steel Sheets and a Welding Torch in your active hand." .into(), name: "Steel Frames".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 30u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -654790771i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSteelIngot".into(), prefab_hash: -654790771i32, desc: "Steel ingots are a metal alloy, crafted in a Furnace by smelting Ore (Iron) and Ore (Coal) at a ratio of 3:1.\nIt may not be elegant, but Ice (Oxite) and Ice (Volatiles) can be combined at a ratio of 1:2 in a furnace to create the necessary gas mixture for smelting." .into(), name: "Ingot (Steel)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Steel".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 38555961i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSteelSheets".into(), prefab_hash: 38555961i32, desc: "An advanced building material, Ingot (Steel) sheets are used when constructing a Steel Frame and several other wall types." .into(), name: "Steel Sheets".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2038663432i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemStelliteGlassSheets".into(), prefab_hash: -2038663432i32, desc: "A stronger glass substitute.".into(), name: "Stellite Glass Sheets".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1897868623i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemStelliteIngot".into(), prefab_hash: -1897868623i32, desc: "".into(), name: "Ingot (Stellite)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Stellite".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2111910840i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSugar".into(), prefab_hash: 2111910840i32, desc: "".into(), name: "Sugar".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Sugar".into(), 10f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1335056202i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSugarCane".into(), prefab_hash: -1335056202i32, desc: "".into(), name: "Sugarcane".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some(vec![("Sugar".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1274308304i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemSuitModCryogenicUpgrade".into(), prefab_hash: -1274308304i32, desc: "Enables suits with basic cooling functionality to work with cryogenic liquid." .into(), name: "Cryogenic Suit Upgrade".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::SuitMod, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -229808600i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemTablet".into(), prefab_hash: -229808600i32, desc: "The Xigo handheld \'Padi\' tablet is an all-purpose data platform, provided as standard issue to all Stationeers. A dynamic multi-tool that accepts a range of cartridges, the Padi becomes an Atmos Analyzer or Tracker, Medical Analyzer, Ore Scanner, eReader, and various other functions." .into(), name: "Handheld Tablet".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Cartridge".into(), typ : Class::Cartridge } ] .into_iter() .collect(), } .into(), ); map.insert( 111280987i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemTerrainManipulator".into(), prefab_hash: 111280987i32, desc: "0.Mode0\n1.Mode1".into(), name: "Terrain Manipulator".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Dirt Canister".into(), typ : Class::Ore } ] .into_iter() .collect(), } .into(), ); map.insert( -998592080i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemTomato".into(), prefab_hash: -998592080i32, desc: "Tomato plants are perennial, and will produce multiple harvests without needing to be replanted. Once the plant is mature, it will fruit at a moderate pace." .into(), name: "Tomato".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 20u32, reagents: Some(vec![("Tomato".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 688734890i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemTomatoSoup".into(), prefab_hash: 688734890i32, desc: "Made using Cooked Tomatos and an Empty Can in a Basic Packaging Machine or Advanced Packaging Machine." .into(), name: "Tomato Soup".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -355127880i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemToolBelt".into(), prefab_hash: -355127880i32, desc: "If there\'s one piece of equipment that embodies Stationeer life above all else, it\'s the humble toolbelt (Editor\'s note: a recent ODA survey of iconic Stationeer equipment also rated the smoking, toxic ruins of an over-pressurized Furnace lying amid the charred remains of your latest base very highly).\nDesigned to meet the most strict-ish ODA safety standards, the toolbelt\'s eight slots hold one thing: tools, and Cable Coil. Not to be confused with the Mining Belt." .into(), name: "Tool Belt".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Belt, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool }, SlotInfo { name : "Tool".into(), typ : Class::Tool } ] .into_iter() .collect(), } .into(), ); map.insert( -800947386i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemTropicalPlant".into(), prefab_hash: -800947386i32, desc: "An anthurium, evolved in the jungles of South America, which will tolerate higher temperatures than most plants." .into(), name: "Tropical Lily".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1516581844i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemUraniumOre".into(), prefab_hash: -1516581844i32, desc: "In 1934, Enrico Fermi noticed that bombarding uranium with neutrons produced a burst of beta rays, and a new material. This process was named \'nuclear fission\', and resulted in cheap energy, the Cold War, and countless thousand deaths. While reasonably common throughout the Solar System, Stationeers are wary of the material." .into(), name: "Ore (Uranium)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 50u32, reagents: Some(vec![("Uranium".into(), 1f64)].into_iter().collect()), slot_class: Class::Ore, sorting_class: SortingClass::Ores, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1253102035i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemVolatiles".into(), prefab_hash: 1253102035i32, desc: "An extremely reactive ice with numerous hydrocarbons trapped inside. For simplicity\'s sake, these are often displayed as H2 by devices like the Atmos Analyzer.\n \nVolatiles combust in a 2:1 ratio with Oxygen, creating Carbon Dioxide and pollutants. However when catalysed via devices such as the H2 Combustor in the presence of Oxygen, they produce\n Steam and heat with a modicum of Carbon Dioxide and Pollutant due to the autoignition of the volatiles in the chamber. Along with Oxygen, volatiles gas is also the major component of fuel for such devices as the Welding Torch.\n" .into(), name: "Ice (Volatiles)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 50u32, reagents: None, slot_class: Class::Ore, sorting_class: SortingClass::Ices, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1567752627i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWallCooler".into(), prefab_hash: -1567752627i32, desc: "This kit creates a Wall Cooler." .into(), name: "Kit (Wall Cooler)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1880134612i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWallHeater".into(), prefab_hash: 1880134612i32, desc: "This kit creates a Kit (Wall Heater)." .into(), name: "Kit (Wall Heater)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1108423476i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWallLight".into(), prefab_hash: 1108423476i32, desc: "This kit creates any one of ten Kit (Lights) variants." .into(), name: "Kit (Lights)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 156348098i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaspaloyIngot".into(), prefab_hash: 156348098i32, desc: "".into(), name: "Ingot (Waspaloy)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 500u32, reagents: Some(vec![("Waspaloy".into(), 1f64)].into_iter().collect()), slot_class: Class::Ingot, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 107741229i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterBottle".into(), prefab_hash: 107741229i32, desc: "Delicious and pure H20, refined from local sources as varied as Venusian ice and trans-Solar comets. Empty bottles can be refilled using the Water Bottle Filler." .into(), name: "Water Bottle".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::LiquidBottle, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 309693520i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterPipeDigitalValve".into(), prefab_hash: 309693520i32, desc: "".into(), name: "Kit (Liquid Digital Valve)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -90898877i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterPipeMeter".into(), prefab_hash: -90898877i32, desc: "".into(), name: "Kit (Liquid Pipe Meter)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1721846327i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWaterWallCooler".into(), prefab_hash: -1721846327i32, desc: "".into(), name: "Kit (Liquid Wall Cooler)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 5u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -598730959i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemWearLamp".into(), prefab_hash: -598730959i32, desc: "".into(), name: "Headlamp".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Helmet, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -2066892079i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "ItemWeldingTorch".into(), prefab_hash: -2066892079i32, desc: "Stored in the standard issue Stationeers Tool Belt, the Arlite welding torch is used to construct a range of essential structures.\nAn upgraded version of the classic \'Zairo\' model first manufactured by ExMin for modular space habitat assembly, the Arlite is powered by a single Canister (Fuel) and designed to function equally well in deep space and deep gravity wells." .into(), name: "Welding Torch".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: Some(ThermalInfo { convection_factor: 0.5f32, radiation_factor: 0.5f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } ] .into_iter() .collect(), } .into(), ); map.insert( -1057658015i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWheat".into(), prefab_hash: -1057658015i32, desc: "A classical symbol of growth and new life, wheat takes a moderate time to grow. Its main use is to create flour using the Reagent Processor." .into(), name: "Wheat".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some(vec![("Carbon".into(), 1f64)].into_iter().collect()), slot_class: Class::Plant, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1535854074i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWireCutters".into(), prefab_hash: 1535854074i32, desc: "Wirecutters allow you to deconstruct various structures, as well as cross-lay cables when held in your non-active hand, and defuse explosives as needed. Wirecutters are stored in the Tool Belt, along with other essential tools." .into(), name: "Wire Cutters".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -504717121i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "ItemWirelessBatteryCellExtraLarge".into(), prefab_hash: -504717121i32, desc: "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full" .into(), name: "Wireless Battery Cell Extra Large".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Battery, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), (5u32, "High".into()), (6u32, "Full".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( -1826023284i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageAirConditioner1".into(), prefab_hash: -1826023284i32, desc: "".into(), name: "Wreckage Air Conditioner".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 169888054i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageAirConditioner2".into(), prefab_hash: 169888054i32, desc: "".into(), name: "Wreckage Air Conditioner".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -310178617i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageHydroponicsTray1".into(), prefab_hash: -310178617i32, desc: "".into(), name: "Wreckage Hydroponics Tray".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -997763i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageLargeExtendableRadiator01".into(), prefab_hash: -997763i32, desc: "".into(), name: "Wreckage Large Extendable Radiator".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 391453348i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureRTG1".into(), prefab_hash: 391453348i32, desc: "".into(), name: "Wreckage Structure RTG".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -834664349i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation001".into(), prefab_hash: -834664349i32, desc: "".into(), name: "Wreckage Structure Weather Station".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1464424921i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation002".into(), prefab_hash: 1464424921i32, desc: "".into(), name: "Wreckage Structure Weather Station".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 542009679i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation003".into(), prefab_hash: 542009679i32, desc: "".into(), name: "Wreckage Structure Weather Station".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1104478996i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation004".into(), prefab_hash: -1104478996i32, desc: "".into(), name: "Wreckage Structure Weather Station".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -919745414i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation005".into(), prefab_hash: -919745414i32, desc: "".into(), name: "Wreckage Structure Weather Station".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1344576960i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation006".into(), prefab_hash: 1344576960i32, desc: "".into(), name: "Wreckage Structure Weather Station".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 656649558i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation007".into(), prefab_hash: 656649558i32, desc: "".into(), name: "Wreckage Structure Weather Station".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1214467897i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageStructureWeatherStation008".into(), prefab_hash: -1214467897i32, desc: "".into(), name: "Wreckage Structure Weather Station".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1662394403i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageTurbineGenerator1".into(), prefab_hash: -1662394403i32, desc: "".into(), name: "Wreckage Turbine Generator".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 98602599i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageTurbineGenerator2".into(), prefab_hash: 98602599i32, desc: "".into(), name: "Wreckage Turbine Generator".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1927790321i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageTurbineGenerator3".into(), prefab_hash: 1927790321i32, desc: "".into(), name: "Wreckage Turbine Generator".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1682930158i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageWallCooler1".into(), prefab_hash: -1682930158i32, desc: "".into(), name: "Wreckage Wall Cooler".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 45733800i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWreckageWallCooler2".into(), prefab_hash: 45733800i32, desc: "".into(), name: "Wreckage Wall Cooler".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Wreckage, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1886261558i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ItemWrench".into(), prefab_hash: -1886261558i32, desc: "One of humanity\'s enduring contributions to the cosmos, the wrench represents the essence of our species. A simple, effective and spiritually barren tool, use it to build and deconstruct a variety of structures" .into(), name: "Wrench".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Tool, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1932952652i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "KitSDBSilo".into(), prefab_hash: 1932952652i32, desc: "This kit creates a SDB Silo." .into(), name: "Kit (SDB Silo)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 231903234i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "KitStructureCombustionCentrifuge".into(), prefab_hash: 231903234i32, desc: "".into(), name: "Kit (Combustion Centrifuge)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Kits, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1427415566i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableShort".into(), prefab_hash: -1427415566i32, desc: "".into(), name: "Kitchen Table (Short)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -78099334i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableSimpleShort".into(), prefab_hash: -78099334i32, desc: "".into(), name: "Kitchen Table (Simple Short)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1068629349i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableSimpleTall".into(), prefab_hash: -1068629349i32, desc: "".into(), name: "Kitchen Table (Simple Tall)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1386237782i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "KitchenTableTall".into(), prefab_hash: -1386237782i32, desc: "".into(), name: "Kitchen Table (Tall)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1605130615i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "Lander".into(), prefab_hash: 1605130615i32, desc: "".into(), name: "Lander".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "Entity".into(), typ : Class::Entity } ] .into_iter() .collect(), } .into(), ); map.insert( -1295222317i32, StructureLogicTemplate { templateType: "StructureLogic".into(), prefab: PrefabInfo { prefab_name: "Landingpad_2x2CenterPiece01".into(), prefab_hash: -1295222317i32, desc: "Recommended for larger traders. This allows for the creation of 4x4 and 6x6 landing areas with symetrical doors" .into(), name: "Landingpad 2x2 Center Piece".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![].into_iter().collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( 912453390i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_BlankPiece".into(), prefab_hash: 912453390i32, desc: "".into(), name: "Landingpad".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1070143159i32, StructureLogicTemplate { templateType: "StructureLogic".into(), prefab: PrefabInfo { prefab_name: "Landingpad_CenterPiece01".into(), prefab_hash: 1070143159i32, desc: "The target point where the trader shuttle will land. Requires a clear view of the sky." .into(), name: "Landingpad Center".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![].into_iter().collect(), modes: Some( vec![ (0u32, "None".into()), (1u32, "NoContact".into()), (2u32, "Moving".into()), (3u32, "Holding".into()), (4u32, "Landed" .into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), } .into(), ); map.insert( 1101296153i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_CrossPiece".into(), prefab_hash: 1101296153i32, desc: "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area." .into(), name: "Landingpad Cross".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2066405918i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_DataConnectionPiece".into(), prefab_hash: -2066405918i32, desc: "Provides power to the landing pad. The data port must be connected to the data port of a computer with a communications motherboard for a trader to be called in to land." .into(), name: "Landingpad Data And Power".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::ContactTypeId, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "None".into()), (1u32, "NoContact".into()), (2u32, "Moving".into()), (3u32, "Holding".into()), (4u32, "Landed" .into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 977899131i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_DiagonalPiece01".into(), prefab_hash: 977899131i32, desc: "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area." .into(), name: "Landingpad Diagonal".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 817945707i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_GasConnectorInwardPiece".into(), prefab_hash: 817945707i32, desc: "".into(), name: "Landingpad Gas Input".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1100218307i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_GasConnectorOutwardPiece".into(), prefab_hash: -1100218307i32, desc: "Pumps gas purchased from a trader out of the landing pad. You can increase the landing pad\'s gas storage capacity by adding more Landingpad Gas Storage to the landing pad." .into(), name: "Landingpad Gas Output".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 170818567i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_GasCylinderTankPiece".into(), prefab_hash: 170818567i32, desc: "Increases the volume of the landing pads gas storage capacity. This volume is used for buying and selling gas to traders." .into(), name: "Landingpad Gas Storage".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1216167727i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_LiquidConnectorInwardPiece".into(), prefab_hash: -1216167727i32, desc: "".into(), name: "Landingpad Liquid Input".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1788929869i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_LiquidConnectorOutwardPiece".into(), prefab_hash: -1788929869i32, desc: "Pumps liquid purchased from a trader out of the landing pad. You can increase the landing pad\'s liquid storage capacity by adding more Landingpad Gas Storage to the landing pad." .into(), name: "Landingpad Liquid Output".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -976273247i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_StraightPiece01".into(), prefab_hash: -976273247i32, desc: "Extends the size of the landing pad area. A basic trader shuttle requires a 3x3 clear landing area." .into(), name: "Landingpad Straight".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1872345847i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_TaxiPieceCorner".into(), prefab_hash: -1872345847i32, desc: "".into(), name: "Landingpad Taxi Corner".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 146051619i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_TaxiPieceHold".into(), prefab_hash: 146051619i32, desc: "".into(), name: "Landingpad Taxi Hold".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1477941080i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Landingpad_TaxiPieceStraight".into(), prefab_hash: -1477941080i32, desc: "".into(), name: "Landingpad Taxi Straight".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1514298582i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "Landingpad_ThreshholdPiece".into(), prefab_hash: -1514298582i32, desc: "".into(), name: "Landingpad Threshhold".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::LandingPad, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1531272458i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "LogicStepSequencer8".into(), prefab_hash: 1531272458i32, desc: "The ODA does not approve of soundtracks or other distractions.\nAs such, Stationeers have had to create their own musical accompaniment to the demanding labor of building and maintaining off-world infrastructure.\nCentral to this pastime is the step sequencer, which allows Stationeers to sequence short musical patterns or loops. \n\nDIY MUSIC - GETTING STARTED\n\n1: Connect 8 Device Step Units to your step sequencer via the data port on the left hand side.\n\n2: Label each step unit, then assign step units 1 through 8 on the step sequencer using the screwdriver.\n\n3: Select the output speaker (eg Passive Speaker) where the sequencer will play the sounds. This needs to be connected to the logic network on the right hand side of the sequencer.\n\n4: Place a Stop Watch and use a Logic Reader and Logic Writer to write the time to the time variable on the sequencer.\n\n5: Set the BPM on the sequencer using a Dial and a Logic Writer to write to the sequencer\'s BPM variable. A higher bpm will play the sequence faster. \n\n6: Insert a sound cartridge of your choosing and select which variant of sound you wish to play by pushing the arrow buttons located above and below the sound cartridge slot.\n\n7: Choose the pitch of the sounds to play by setting the dial on each of your 8 step units to the desired note. With drums, each note is a different drum sounds. You can trial your sounds by pushing the activate button on each step unit (with the sequencer inactive).\n\n8: Get freaky with the Low frequency oscillator.\n\n9: Finally, activate the sequencer, Vibeoneer." .into(), name: "Logic Step Sequencer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Time, MemoryAccess::ReadWrite), (LogicType::Bpm, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Whole Note".into()), (1u32, "Half Note".into()), (2u32, "Quarter Note".into()), (3u32, "Eighth Note".into()), (4u32, "Sixteenth Note".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Sound Cartridge".into(), typ : Class::SoundCartridge } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -99064335i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "Meteorite".into(), prefab_hash: -99064335i32, desc: "".into(), name: "Meteorite".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1667675295i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MonsterEgg".into(), prefab_hash: -1667675295i32, desc: "".into(), name: "".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -337075633i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardComms".into(), prefab_hash: -337075633i32, desc: "When placed in a Computer and connected to a Landingpad Data And Power, a Medium Satellite Dish, and a Vending Machine allows Stationeers to trade with suppliers. Adjust the horizontal and vertical attributes of the Medium Satellite Dish either directly or through logic. You need a communications signal of 95% or above to establish reliable communications with a trader. A minimum of a 3x3 clear pad area with a Landingpad Center at the center is required for a trader to land." .into(), name: "Communications Motherboard".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 502555944i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardLogic".into(), prefab_hash: 502555944i32, desc: "Motherboards are connected to Computers to perform various technical functions.\nThe Norsec-designed K-cops logic motherboard allows Stationeers to set variables and actions on specific logic-controlled items." .into(), name: "Logic Motherboard".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -127121474i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardMissionControl".into(), prefab_hash: -127121474i32, desc: "".into(), name: "".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -161107071i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardProgrammableChip".into(), prefab_hash: -161107071i32, desc: "When placed in a Computer, the IC Editor allows players to write and edit IC code, which can then be uploaded to a Integrated Circuit (IC10) if housed in an IC Housing." .into(), name: "IC Editor Motherboard".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -806986392i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardRockets".into(), prefab_hash: -806986392i32, desc: "".into(), name: "Rocket Control Motherboard".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1908268220i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MotherboardSorter".into(), prefab_hash: -1908268220i32, desc: "Motherboards are connected to Computers to perform various technical functions.\nThe Norsec-designed K-cops 10-10 sorter motherboard permits Stationeers to control which items a Sorter does, and does not, permit to pass." .into(), name: "Sorter Motherboard".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Motherboard, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1930442922i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "MothershipCore".into(), prefab_hash: -1930442922i32, desc: "A relic of from an earlier era of space ambition, Sinotai\'s mothership cores formed the central element of a generation\'s space-going creations. While Sinotai\'s pivot to smaller, modular craft upset some purists, motherships continue to be built and maintained by dedicated enthusiasts." .into(), name: "Mothership Core".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 155856647i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "NpcChick".into(), prefab_hash: 155856647i32, desc: "".into(), name: "Chick".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { name : "Lungs".into(), typ : Class::Organ } ] .into_iter() .collect(), } .into(), ); map.insert( 399074198i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "NpcChicken".into(), prefab_hash: 399074198i32, desc: "".into(), name: "Chicken".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Brain".into(), typ : Class::Organ }, SlotInfo { name : "Lungs".into(), typ : Class::Organ } ] .into_iter() .collect(), } .into(), ); map.insert( 248893646i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "PassiveSpeaker".into(), prefab_hash: 248893646i32, desc: "".into(), name: "Passive Speaker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Volume, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::ReadWrite), (LogicType::SoundAlert, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::ReadWrite), (LogicType::NameHash, MemoryAccess::ReadWrite) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 443947415i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "PipeBenderMod".into(), prefab_hash: 443947415i32, desc: "Apply to an Hydraulic Pipe Bender with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options." .into(), name: "Pipe Bender Mod".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1958705204i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "PortableComposter".into(), prefab_hash: -1958705204i32, desc: "A simple composting device, the basic composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires a full Liquid Canister and a battery to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat.\n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer\'s effects on plants will vary depending on the respective proportions of its ingredients.\n\n- food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for" .into(), name: "Portable Composter".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::Battery }, SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } ] .into_iter() .collect(), } .into(), ); map.insert( 2043318949i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "PortableSolarPanel".into(), prefab_hash: 2043318949i32, desc: "".into(), name: "Portable Solar Panel".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 399661231i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RailingElegant01".into(), prefab_hash: 399661231i32, desc: "".into(), name: "Railing Elegant (Type 1)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1898247915i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RailingElegant02".into(), prefab_hash: -1898247915i32, desc: "".into(), name: "Railing Elegant (Type 2)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2072792175i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RailingIndustrial02".into(), prefab_hash: -2072792175i32, desc: "".into(), name: "Railing Industrial (Type 2)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 980054869i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorBlue".into(), prefab_hash: 980054869i32, desc: "".into(), name: "Color Dye (Blue)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some(vec![("ColorBlue".into(), 10f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 120807542i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorGreen".into(), prefab_hash: 120807542i32, desc: "".into(), name: "Color Dye (Green)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some(vec![("ColorGreen".into(), 10f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -400696159i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorOrange".into(), prefab_hash: -400696159i32, desc: "".into(), name: "Color Dye (Orange)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some( vec![("ColorOrange".into(), 10f64)].into_iter().collect(), ), slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1998377961i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorRed".into(), prefab_hash: 1998377961i32, desc: "".into(), name: "Color Dye (Red)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some(vec![("ColorRed".into(), 10f64)].into_iter().collect()), slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 635208006i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ReagentColorYellow".into(), prefab_hash: 635208006i32, desc: "".into(), name: "Color Dye (Yellow)".into(), }, item: ItemInfo { consumable: true, filter_type: None, ingredient: true, max_quantity: 100u32, reagents: Some( vec![("ColorYellow".into(), 10f64)].into_iter().collect(), ), slot_class: Class::None, sorting_class: SortingClass::Resources, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -788672929i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RespawnPoint".into(), prefab_hash: -788672929i32, desc: "Place a respawn point to set a player entry point to your base when loading in, or returning from the dead." .into(), name: "Respawn Point".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -491247370i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "RespawnPointWallMounted".into(), prefab_hash: -491247370i32, desc: "".into(), name: "Respawn Point (Mounted)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 434786784i32, ItemCircuitHolderTemplate { templateType: "ItemCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "Robot".into(), prefab_hash: 434786784i32, desc: "Designed by - presumably drunk - Norsec roboticists, AIMeE (or Automated Independent Mechanical Entity) can be a Stationeer\'s best friend, or tiresome nemesis, or both several times in the same day. \n \nIntended to unearth and retrieve ores automatically, the unit requires basic programming knowledge to operate, and IC Editor Motherboard.\n\nAIMEe has 7 modes:\n\nRobotMode.None = 0 = Do nothing\nRobotMode.None = 1 = Follow nearest player\nRobotMode.None = 2 = Move to target in straight line\nRobotMode.None = 3 = Wander around looking for ores in 15 co-ords radius\nRobotMode.None = 4 = Unload in chute input or chute bin within 3 meters / 1.5 large grids\nRobotMode.None = 5 = Path(find) to target\nRobotMode.None = 6 = Automatic assigned state, shows when storage slots are fullConnects to Logic Transmitter" .into(), name: "AIMeE Bot".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::PressureExternal, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::TemperatureExternal, MemoryAccess::Read), (LogicType::PositionX, MemoryAccess::Read), (LogicType::PositionY, MemoryAccess::Read), (LogicType::PositionZ, MemoryAccess::Read), (LogicType::VelocityMagnitude, MemoryAccess::Read), (LogicType::VelocityRelativeX, MemoryAccess::Read), (LogicType::VelocityRelativeY, MemoryAccess::Read), (LogicType::VelocityRelativeZ, MemoryAccess::Read), (LogicType::TargetX, MemoryAccess::Write), (LogicType::TargetY, MemoryAccess::Write), (LogicType::TargetZ, MemoryAccess::Write), (LogicType::MineablesInVicinity, MemoryAccess::Read), (LogicType::MineablesInQueue, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::ForwardX, MemoryAccess::Read), (LogicType::ForwardY, MemoryAccess::Read), (LogicType::ForwardZ, MemoryAccess::Read), (LogicType::Orientation, MemoryAccess::Read), (LogicType::VelocityX, MemoryAccess::Read), (LogicType::VelocityY, MemoryAccess::Read), (LogicType::VelocityZ, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "None".into()), (1u32, "Follow".into()), (2u32, "MoveToTarget".into()), (3u32, "Roam".into()), (4u32, "Unload" .into()), (5u32, "PathToTarget".into()), (6u32, "StorageFull" .into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: true, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore }, SlotInfo { name : "Ore".into(), typ : Class::Ore } ] .into_iter() .collect(), } .into(), ); map.insert( 350726273i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "RoverCargo".into(), prefab_hash: 350726273i32, desc: "Connects to Logic Transmitter" .into(), name: "Rover (Cargo)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.01f32, radiation_factor: 0.01f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::FilterType, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (10u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (11u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (12u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (13u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (14u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (15u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: true, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { name : "Gas Filter" .into(), typ : Class::GasFilter }, SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister }, SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Container Slot".into(), typ : Class::None }, SlotInfo { name : "Container Slot".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( -2049946335i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "Rover_MkI".into(), prefab_hash: -2049946335i32, desc: "A distant cousin of the jeep, the Mk I {Sinotai electric rover is one of the most simple and durable light vehicles in the known universe. Able to carry two passengers and cargo such as the Portable Gas Tank (Air) or , it is powered by up to three batteries, accepting everything including Battery Cell (Nuclear).\nA quad-array of hub-mounted electric engines propels the reinforced aluminium frame over most terrain and modest obstacles. While the Mk I is designed for stability in low-horizontality circumstances, if it rolls, try using your Crowbar to put it right way up.Connects to Logic Transmitter" .into(), name: "Rover MkI".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (10u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: true, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { name : "Entity".into(), typ : Class::Entity }, SlotInfo { name : "Battery" .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( 861674123i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "Rover_MkI_build_states".into(), prefab_hash: 861674123i32, desc: "".into(), name: "Rover MKI".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -256607540i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SMGMagazine".into(), prefab_hash: -256607540i32, desc: "".into(), name: "SMG Magazine".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Magazine, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1139887531i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Cocoa".into(), prefab_hash: 1139887531i32, desc: "".into(), name: "Cocoa Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1290755415i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Corn".into(), prefab_hash: -1290755415i32, desc: "Grow a Corn." .into(), name: "Corn Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1990600883i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Fern".into(), prefab_hash: -1990600883i32, desc: "Grow a Fern." .into(), name: "Fern Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 311593418i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Mushroom".into(), prefab_hash: 311593418i32, desc: "Grow a Mushroom." .into(), name: "Mushroom Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1005571172i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Potato".into(), prefab_hash: 1005571172i32, desc: "Grow a Potato." .into(), name: "Potato Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1423199840i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Pumpkin".into(), prefab_hash: 1423199840i32, desc: "Grow a Pumpkin." .into(), name: "Pumpkin Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1691151239i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Rice".into(), prefab_hash: -1691151239i32, desc: "Grow some Rice." .into(), name: "Rice Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1783004244i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Soybean".into(), prefab_hash: 1783004244i32, desc: "Grow some Soybean." .into(), name: "Soybean Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1884103228i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_SugarCane".into(), prefab_hash: -1884103228i32, desc: "".into(), name: "Sugarcane Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 488360169i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Switchgrass".into(), prefab_hash: 488360169i32, desc: "".into(), name: "Switchgrass Seed".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1922066841i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Tomato".into(), prefab_hash: -1922066841i32, desc: "Grow a Tomato." .into(), name: "Tomato Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -654756733i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "SeedBag_Wheet".into(), prefab_hash: -654756733i32, desc: "Grow some Wheat." .into(), name: "Wheat Seeds".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 10u32, reagents: None, slot_class: Class::Plant, sorting_class: SortingClass::Food, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1991297271i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "SpaceShuttle".into(), prefab_hash: -1991297271i32, desc: "An antiquated Sinotai transport craft, long since decommissioned." .into(), name: "Space Shuttle".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Captain\'s Seat".into(), typ : Class::Entity }, SlotInfo { name : "Passenger Seat Left".into(), typ : Class::Entity }, SlotInfo { name : "Passenger Seat Right".into(), typ : Class::Entity } ] .into_iter() .collect(), } .into(), ); map.insert( -1527229051i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StopWatch".into(), prefab_hash: -1527229051i32, desc: "".into(), name: "Stop Watch".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Time, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1298920475i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAccessBridge".into(), prefab_hash: 1298920475i32, desc: "Extendable bridge that spans three grids".into(), name: "Access Bridge".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1129453144i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureActiveVent".into(), prefab_hash: -1129453144i32, desc: "The active vent is a powered device for maintaining gas pressure by pumping gas into (or out of) a pipe network. The vent has two modes: \'Outward\' sets it to pump gas into a space until pressure is reached; \'Inward\' sets it to pump gas out until pressure is reached. The pressure parameter can be set on a connected Console. Default pressure is 101kPa for Outward; 0kPa for Inward ..." .into(), name: "Active Vent".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::PressureExternal, MemoryAccess::ReadWrite), (LogicType::PressureInternal, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Outward".into()), (1u32, "Inward".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 446212963i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAdvancedComposter".into(), prefab_hash: 446212963i32, desc: "The advanced composter creates Fertilizer out of organic matter. It accepts food, Decayed Food or Biomass. It requires Water and power to operate, accelerating the natural composting process.\nWhen processing, it releases nitrogen and volatiles, as well a small amount of heat. \n\nCompost composition\nFertilizer is produced at a 1:3 ratio of fertilizer to ingredients. The fertilizer\'s effects on plants will vary depending on the respective proportions of its ingredients.\n\n- Food increases PLANT YIELD up to two times\n- Decayed Food increases plant GROWTH SPEED up to two times\n- Biomass increases the NUMBER OF GROWTH CYCLES the fertilizer lasts for up to five times\n" .into(), name: "Advanced Composter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 545937711i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAdvancedFurnace".into(), prefab_hash: 545937711i32, desc: "The advanced furnace comes with integrated inlet and outlet pumps for controlling the unit\'s internal pressure." .into(), name: "Advanced Furnace".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::SettingInput, MemoryAccess::ReadWrite), (LogicType::SettingOutput, MemoryAccess::ReadWrite), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: true, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: true, }, } .into(), ); map.insert( -463037670i32, StructureLogicDeviceConsumerMemoryTemplate { templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureAdvancedPackagingMachine".into(), prefab_hash: -463037670i32, desc: "The Xigo Advanced Cannifier Multi-Plus Pro is an automateable packaging machine that uses Empty Cans and cooked food to create canned sustenance that does not decay. Note that the ACMPP only accepts cooked food and tin cans." .into(), name: "Advanced Packaging Machine".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::ReadWrite), (LogicType::CompletionRatio, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: true, }, consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemCookedCondensedMilk".into(), "ItemCookedCorn".into(), "ItemCookedMushroom".into(), "ItemCookedPowderedEggs".into(), "ItemCookedPumpkin".into(), "ItemCookedRice".into(), "ItemCookedSoybean".into(), "ItemCookedTomato".into(), "ItemEmptyCan" .into(), "ItemMilk".into(), "ItemPotatoBaked".into(), "ItemSoyOil" .into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ ("ItemCannedCondensedMilk".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Milk".into(), 200f64), ("Steel" .into(), 1f64)] .into_iter().collect() }), ("ItemCannedEdamame" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Oil" .into(), 1f64), ("Soy".into(), 15f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemCannedMushroom".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Mushroom".into(), 8f64), ("Oil" .into(), 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemCannedPowderedEggs".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Egg".into(), 5f64), ("Oil" .into(), 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemCannedRicePudding".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Oil".into(), 1f64), ("Rice" .into(), 5f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemCornSoup".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Corn".into(), 5f64), ("Oil".into(), 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemFrenchFries".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Oil".into(), 1f64), ("Potato" .into(), 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemPumpkinSoup".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Oil".into(), 1f64), ("Pumpkin".into(), 5f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemTomatoSoup" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Oil" .into(), 1f64), ("Steel".into(), 1f64), ("Tomato".into(), 5f64)] .into_iter().collect() }) ] .into_iter() .collect(), }), memory: MemoryInfo { instructions: Some( vec![ ("DeviceSetLock".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : InstructionPartType::Bool8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(48u32) }] .into_iter().collect() }), ("EjectAllReagents".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }), ("EjectReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }), ("ExecuteRecipe".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("JumpIfNextInvalid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("JumpToAddress".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("MissingRecipeReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, Some(62u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("StackPointer".into(), Instruction { description : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("WaitUntilNextValid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }) ] .into_iter() .collect(), ), memory_access: MemoryAccess::ReadWrite, memory_size: 64u32, }, } .into(), ); map.insert( -2087593337i32, StructureCircuitHolderTemplate { templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureAirConditioner".into(), prefab_hash: -2087593337i32, desc: "Built using the Kit (Atmospherics), the ExMin-designed air conditioner is used to raise or lower input gas temperature.\n\t \nThe unit has three pipe connections: input, output, and waste. Gas fed into the input will be heated or cooled to reach the target temperature, while the opposite will happen to gas on the waste network.\n\nMultiple Efficiency Multipliers can effect the amount of energy the Air Conditioner uses, and these can be view on the unit\'s green Information Panel. As the temperature difference between input and waste increases, the Temperature Differential Efficiency Multiplier will decrease. If input or waste temperature is extremely hot or cold, the Operational Temperature Efficiency will decrease. If the input or waste pipe has approach low pressures, the Pressure Efficiency will decrease.\n\nPipe Convection Radiators may be useful in bringing extreme pipe temperatures back towards normal world temperatures. \n \nFor more information on using the air conditioner, consult the temperature control Guides page." .into(), name: "Air Conditioner".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::PressureInput, MemoryAccess::Read), (LogicType::TemperatureInput, MemoryAccess::Read), (LogicType::RatioOxygenInput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioNitrogenInput, MemoryAccess::Read), (LogicType::RatioPollutantInput, MemoryAccess::Read), (LogicType::RatioVolatilesInput, MemoryAccess::Read), (LogicType::RatioWaterInput, MemoryAccess::Read), (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), (LogicType::TotalMolesInput, MemoryAccess::Read), (LogicType::PressureOutput, MemoryAccess::Read), (LogicType::TemperatureOutput, MemoryAccess::Read), (LogicType::RatioOxygenOutput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioNitrogenOutput, MemoryAccess::Read), (LogicType::RatioPollutantOutput, MemoryAccess::Read), (LogicType::RatioVolatilesOutput, MemoryAccess::Read), (LogicType::RatioWaterOutput, MemoryAccess::Read), (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), (LogicType::TotalMolesOutput, MemoryAccess::Read), (LogicType::PressureOutput2, MemoryAccess::Read), (LogicType::TemperatureOutput2, MemoryAccess::Read), (LogicType::RatioOxygenOutput2, MemoryAccess::Read), (LogicType::RatioCarbonDioxideOutput2, MemoryAccess::Read), (LogicType::RatioNitrogenOutput2, MemoryAccess::Read), (LogicType::RatioPollutantOutput2, MemoryAccess::Read), (LogicType::RatioVolatilesOutput2, MemoryAccess::Read), (LogicType::RatioWaterOutput2, MemoryAccess::Read), (LogicType::RatioNitrousOxideOutput2, MemoryAccess::Read), (LogicType::TotalMolesOutput2, MemoryAccess::Read), (LogicType::CombustionInput, MemoryAccess::Read), (LogicType::CombustionOutput, MemoryAccess::Read), (LogicType::CombustionOutput2, MemoryAccess::Read), (LogicType::OperationalTemperatureEfficiency, MemoryAccess::Read), (LogicType::TemperatureDifferentialEfficiency, MemoryAccess::Read), (LogicType::PressureEfficiency, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenOutput2, MemoryAccess::Read), (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), (LogicType::RatioLiquidOxygenOutput2, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesOutput2, MemoryAccess::Read), (LogicType::RatioSteamInput, MemoryAccess::Read), (LogicType::RatioSteamOutput, MemoryAccess::Read), (LogicType::RatioSteamOutput2, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideOutput2, MemoryAccess::Read), (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), (LogicType::RatioLiquidPollutantOutput2, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideOutput2, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Idle".into()), (1u32, "Active".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Waste }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: Some(2u32), has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -2105052344i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAirlock".into(), prefab_hash: -2105052344i32, desc: "The standard airlock is a powered portal that forms the main component of an airlock chamber. As long as the airlock is not locked, it can be manually opened using a crowbar." .into(), name: "Airlock".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1736080881i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAirlockGate".into(), prefab_hash: 1736080881i32, desc: "1 x 1 modular door piece for building hangar doors.".into(), name: "Small Hangar Door".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1811979158i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAngledBench".into(), prefab_hash: 1811979158i32, desc: "".into(), name: "Bench (Angled)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -247344692i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureArcFurnace".into(), prefab_hash: -247344692i32, desc: "The simplest smelting system available to the average Stationeer, Recurso\'s arc furnace was forged itself in the depths of the Solar System to help explorational geologists determine the purity of potential asteroidal mining targets.\nCo-opted by the ODA, it now provides Stationeers with a way to produce pure ingots of various resources.\nThe smelting process also releases a range of by product gases, principally Nitrogen, Carbon Dioxide, Volatiles and Oxygen in differing ratios. These can be recaptured from the atmosphere by filtering, but also make the arc furnace a risk in closed environments. \nUnlike the more advanced Furnace, the arc furnace cannot create alloys." .into(), name: "Arc Furnace".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::Ore }, SlotInfo { name : "Export".into(), typ : Class::Ingot } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: true, }, } .into(), ); map.insert( 1999523701i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAreaPowerControl".into(), prefab_hash: 1999523701i32, desc: "An Area Power Control (APC) has three main functions: \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network.\nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only." .into(), name: "Area Power Control".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Charge, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PowerPotential, MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Idle".into()), (1u32, "Discharged".into()), (2u32, "Discharging".into()), (3u32, "Charging".into()), (4u32, "Charged".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1032513487i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAreaPowerControlReversed".into(), prefab_hash: -1032513487i32, desc: "An Area Power Control (APC) has three main functions. \nIts primary purpose is to regulate power flow, ensuring uninterrupted performance from devices and machinery, especially those with a fluctuating draw. \nAPCs also create sub-networks, as no devices on the far side of an APC are visible on the main network. \nLastly, an APC charges batteries, which can provide backup power to the sub-network in the case of an outage. Note that an APC requires a battery to stabilize power draw. It also has two variants, each allowing power to flow in one direction only." .into(), name: "Area Power Control".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Charge, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PowerPotential, MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Idle".into()), (1u32, "Discharged".into()), (2u32, "Discharging".into()), (3u32, "Charging".into()), (4u32, "Charged".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 7274344i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureAutoMinerSmall".into(), prefab_hash: 7274344i32, desc: "The Recurso SquareDig autominer is a structure that when built will mine a vertical 2x2 shaft until it hits bedrock. The autominer can be connected to a chute system, and is controllable by a logic network. Note that the autominer outputs more ore than a conventional Mining Drill over the same area." .into(), name: "Autominer (Small)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 336213101i32, StructureLogicDeviceConsumerMemoryTemplate { templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureAutolathe".into(), prefab_hash: 336213101i32, desc: "The foundation of most Stationeer fabrication systems, the ExMin autolathe is a multi-axis molecular compositional system. Its complexity demands considerable time to assemble, but it remains an indispensable creation tool. Upgrade the device using a Autolathe Printer Mod for additional recipes and faster processing speeds.\n\t " .into(), name: "Autolathe".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::ReadWrite), (LogicType::CompletionRatio, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: true, }, consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ ("CardboardBox".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 120f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 2f64)] .into_iter().collect() }), ("ItemCableCoil".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Copper".into(), 0.5f64)] .into_iter().collect() }), ("ItemCoffeeMug".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 70f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemEggCarton".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 2f64)] .into_iter().collect() }), ("ItemEmptyCan".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 70f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemEvaSuit".into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemGlassSheets".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 2f64)] .into_iter().collect() }), ("ItemIronFrames".into(), Recipe { tier : MachineTier::TierOne, time : 4f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 4f64)] .into_iter().collect() }), ("ItemIronSheets".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemKitAccessBridge".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 15000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Solder".into(), 2f64), ("Steel".into(), 10f64)] .into_iter() .collect() }), ("ItemKitArcFurnace".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" .into(), 20f64)] .into_iter().collect() }), ("ItemKitAutolathe" .into(), Recipe { tier : MachineTier::TierOne, time : 180f64, energy : 36000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 2f64), ("Iron".into(), 20f64)] .into_iter().collect() }), ("ItemKitBeds".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 20f64)] .into_iter().collect() }), ("ItemKitBlastDoor".into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 3f64), ("Steel".into(), 15f64)] .into_iter().collect() }), ("ItemKitCentrifuge".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 18000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" .into(), 20f64)] .into_iter().collect() }), ("ItemKitChairs".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 20f64)] .into_iter().collect() }), ("ItemKitChute".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemKitCompositeCladding".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemKitCompositeFloorGrating".into(), Recipe { tier : MachineTier::TierOne, time : 3f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemKitCrate".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemKitCrateMkII".into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Gold".into(), 5f64), ("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemKitCrateMount".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemKitDeepMiner".into(), Recipe { tier : MachineTier::TierTwo, time : 180f64, energy : 72000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Constantan".into(), 5f64), ("Electrum".into(), 5f64), ("Invar".into(), 10f64), ("Steel".into(), 50f64)] .into_iter() .collect() }), ("ItemKitDoor".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 3f64), ("Iron" .into(), 7f64)] .into_iter().collect() }), ("ItemKitElectronicsPrinter".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" .into(), 2f64), ("Iron".into(), 20f64)] .into_iter().collect() }), ("ItemKitFlagODA".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 8f64)] .into_iter().collect() }), ("ItemKitFurnace".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Iron".into(), 30f64)] .into_iter().collect() }), ("ItemKitFurniture".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" .into(), 20f64)] .into_iter().collect() }), ("ItemKitHydraulicPipeBender".into(), Recipe { tier : MachineTier::TierOne, time : 180f64, energy : 18000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" .into(), 2f64), ("Iron".into(), 20f64)] .into_iter().collect() }), ("ItemKitInteriorDoors".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 3f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemKitLadder".into(), Recipe { tier : MachineTier::TierOne, time : 3f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemKitLocker".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemKitPipe".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 0.5f64)] .into_iter().collect() }), ("ItemKitRailing".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemKitRecycler".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Iron" .into(), 20f64)] .into_iter().collect() }), ("ItemKitReinforcedWindows".into(), Recipe { tier : MachineTier::TierOne, time : 7f64, energy : 700f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 2f64)] .into_iter().collect() }), ("ItemKitRespawnPointWallMounted".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemKitRocketManufactory".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" .into(), 2f64), ("Iron".into(), 20f64)] .into_iter().collect() }), ("ItemKitSDBHopper".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 700f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 15f64)] .into_iter().collect() }), ("ItemKitSecurityPrinter".into(), Recipe { tier : MachineTier::TierOne, time : 180f64, energy : 36000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 20f64), ("Gold" .into(), 20f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemKitSign".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemKitSorter".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 1f64), ("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemKitStacker" .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 10f64)] .into_iter() .collect() }), ("ItemKitStairs".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 15f64)] .into_iter().collect() }), ("ItemKitStairwell".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 15f64)] .into_iter().collect() }), ("ItemKitStandardChute".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Constantan" .into(), 2f64), ("Electrum".into(), 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemKitTables".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" .into(), 20f64)] .into_iter().collect() }), ("ItemKitToolManufactory" .into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Iron".into(), 20f64)] .into_iter() .collect() }), ("ItemKitWall".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemKitWallArch".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemKitWallFlat".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemKitWallGeometry".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemKitWallIron".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemKitWallPadded".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemKitWindowShutter".into(), Recipe { tier : MachineTier::TierOne, time : 7f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Iron".into(), 1f64), ("Steel".into(), 2f64)] .into_iter().collect() }), ("ItemPlasticSheets".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 0.5f64)] .into_iter().collect() }), ("ItemSpaceHelmet".into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64)] .into_iter().collect() }), ("ItemSteelFrames".into(), Recipe { tier : MachineTier::TierOne, time : 7f64, energy : 800f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 2f64)] .into_iter().collect() }), ("ItemSteelSheets".into(), Recipe { tier : MachineTier::TierOne, time : 3f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 0.5f64)] .into_iter().collect() }), ("ItemStelliteGlassSheets".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Silicon".into(), 2f64), ("Stellite".into(), 1f64)] .into_iter().collect() }), ("ItemWallLight".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 1f64), ("Silicon".into(), 1f64)] .into_iter().collect() }), ("KitSDBSilo" .into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 20f64), ("Steel" .into(), 15f64)] .into_iter().collect() }), ("KitStructureCombustionCentrifuge".into(), Recipe { tier : MachineTier::TierTwo, time : 120f64, energy : 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Constantan".into(), 5f64), ("Invar".into(), 10f64), ("Steel".into(), 20f64)] .into_iter() .collect() }) ] .into_iter() .collect(), }), memory: MemoryInfo { instructions: Some( vec![ ("DeviceSetLock".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : InstructionPartType::Bool8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(48u32) }] .into_iter().collect() }), ("EjectAllReagents".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }), ("EjectReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }), ("ExecuteRecipe".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("JumpIfNextInvalid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("JumpToAddress".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("MissingRecipeReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, Some(62u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("StackPointer".into(), Instruction { description : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("WaitUntilNextValid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }) ] .into_iter() .collect(), ), memory_access: MemoryAccess::ReadWrite, memory_size: 64u32, }, } .into(), ); map.insert( -1672404896i32, StructureLogicDeviceConsumerMemoryTemplate { templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureAutomatedOven".into(), prefab_hash: -1672404896i32, desc: "".into(), name: "Automated Oven".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::ReadWrite), (LogicType::CompletionRatio, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: true, }, consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemCorn".into(), "ItemEgg".into(), "ItemFertilizedEgg".into(), "ItemFlour".into(), "ItemMilk".into(), "ItemMushroom".into(), "ItemPotato".into(), "ItemPumpkin".into(), "ItemRice".into(), "ItemSoybean".into(), "ItemSoyOil".into(), "ItemTomato".into(), "ItemSugarCane".into(), "ItemCocoaTree".into(), "ItemCocoaPowder" .into(), "ItemSugar".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, fabricator_info: Some(FabricatorInfo { tier: MachineTier::TierOne, recipes: vec![ ("ItemBreadLoaf".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Flour".into(), 200f64), ("Oil".into(), 5f64)] .into_iter().collect() }), ("ItemCerealBar".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Flour".into(), 50f64)] .into_iter().collect() }), ("ItemChocolateBar".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Cocoa".into(), 2f64), ("Sugar" .into(), 10f64)] .into_iter().collect() }), ("ItemChocolateCake" .into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 5i64, reagents : vec![("Cocoa".into(), 2f64), ("Egg".into(), 1f64), ("Flour".into(), 50f64), ("Milk".into(), 5f64), ("Sugar".into(), 50f64)] .into_iter() .collect() }), ("ItemChocolateCerealBar".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Cocoa".into(), 1f64), ("Flour" .into(), 50f64)] .into_iter().collect() }), ("ItemCookedCondensedMilk".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Milk".into(), 100f64)] .into_iter().collect() }), ("ItemCookedCorn".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Corn".into(), 1f64)] .into_iter().collect() }), ("ItemCookedMushroom".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Mushroom".into(), 1f64)] .into_iter().collect() }), ("ItemCookedPowderedEggs".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Egg".into(), 4f64)] .into_iter().collect() }), ("ItemCookedPumpkin".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Pumpkin".into(), 1f64)] .into_iter().collect() }), ("ItemCookedRice".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Rice".into(), 3f64)] .into_iter().collect() }), ("ItemCookedSoybean".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Soy".into(), 5f64)] .into_iter().collect() }), ("ItemCookedTomato".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Tomato".into(), 1f64)] .into_iter().collect() }), ("ItemFries".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Oil".into(), 5f64), ("Potato" .into(), 1f64)] .into_iter().collect() }), ("ItemMuffin".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Egg".into(), 1f64), ("Flour".into(), 50f64), ("Milk".into(), 10f64)] .into_iter() .collect() }), ("ItemPlainCake".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Egg".into(), 1f64), ("Flour" .into(), 50f64), ("Milk".into(), 5f64), ("Sugar".into(), 50f64)] .into_iter().collect() }), ("ItemPotatoBaked".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Potato".into(), 1f64)] .into_iter().collect() }), ("ItemPumpkinPie".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 0f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Egg".into(), 1f64), ("Flour" .into(), 100f64), ("Milk".into(), 10f64), ("Pumpkin".into(), 10f64)] .into_iter().collect() }) ] .into_iter() .collect(), }), memory: MemoryInfo { instructions: Some( vec![ ("DeviceSetLock".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : InstructionPartType::Bool8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(48u32) }] .into_iter().collect() }), ("EjectAllReagents".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }), ("EjectReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }), ("ExecuteRecipe".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("JumpIfNextInvalid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("JumpToAddress".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("MissingRecipeReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, Some(62u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("StackPointer".into(), Instruction { description : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("WaitUntilNextValid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }) ] .into_iter() .collect(), ), memory_access: MemoryAccess::ReadWrite, memory_size: 64u32, }, } .into(), ); map.insert( 2099900163i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBackLiquidPressureRegulator".into(), prefab_hash: 2099900163i32, desc: "Regulates the volume ratio of liquid in the input Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty." .into(), name: "Liquid Back Volume Regulator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1149857558i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBackPressureRegulator".into(), prefab_hash: -1149857558i32, desc: "Unlike the Pressure Regulator, which closes when the input exceeds a given pressure, the back pressure regulator opens when input pressure reaches a given value." .into(), name: "Back Pressure Regulator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1613497288i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBasketHoop".into(), prefab_hash: -1613497288i32, desc: "".into(), name: "Basket Hoop".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -400115994i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBattery".into(), prefab_hash: -400115994i32, desc: "Providing large-scale, reliable power storage, the Sinotai \'Dianzi\' station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: \'Dianzi cooks, but it also frys.\' \nPOWER OUTPUT\nAble to store up to 3600000W of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large)." .into(), name: "Station Battery".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Charge, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PowerPotential, MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), (5u32, "High".into()), (6u32, "Full".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1945930022i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryCharger".into(), prefab_hash: 1945930022i32, desc: "The 5-slot Xigo battery charger fits the Battery Cell (Small), Battery Cell (Large) and Battery Cell (Nuclear), providing up to 500W to any connected cell. Note: the older design means this device has minor power draw (10W) even when not charging." .into(), name: "Battery Cell Charger".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery" .into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ : Class::Battery } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -761772413i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryChargerSmall".into(), prefab_hash: -761772413i32, desc: "".into(), name: "Battery Charger Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Battery".into(), typ : Class::Battery }, SlotInfo { name : "Battery".into(), typ : Class::Battery } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1388288459i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryLarge".into(), prefab_hash: -1388288459i32, desc: "Providing even better large-scale, reliable power storage than the {THING;StructureBattery}, the Sinotai \'Da Dianchi\' large station battery is the heart of most Stationeer bases. \nThere are a variety of cautions to the design of electrical systems using batteries, and every experienced Stationeer has a story to tell, hence the Stationeer adage: \'Dianzi cooks, but it also frys.\' \nPOWER OUTPUT\nAble to store up to 9000001 watts of power, there are no practical limits to its throughput, hence it is wise to use Cable Coil (Heavy). Seasoned electrical engineers will also laugh in the face of those who fail to separate out their power generation networks using an Area Power Control and Transformer (Large). " .into(), name: "Station Battery (Large)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Charge, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PowerPotential, MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), (5u32, "High".into()), (6u32, "Full".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1125305264i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatteryMedium".into(), prefab_hash: -1125305264i32, desc: "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full" .into(), name: "Battery (Medium)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::Read), (LogicType::Charge, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PowerPotential, MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), (5u32, "High".into()), (6u32, "Full".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -2123455080i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBatterySmall".into(), prefab_hash: -2123455080i32, desc: "0.Empty\n1.Critical\n2.VeryLow\n3.Low\n4.Medium\n5.High\n6.Full" .into(), name: "Auxiliary Rocket Battery ".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::Read), (LogicType::Charge, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PowerPotential, MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Empty".into()), (1u32, "Critical".into()), (2u32, "VeryLow".into()), (3u32, "Low".into()), (4u32, "Medium".into()), (5u32, "High".into()), (6u32, "Full".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -188177083i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBeacon".into(), prefab_hash: -188177083i32, desc: "".into(), name: "Beacon".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Color, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: true, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -2042448192i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench".into(), prefab_hash: -2042448192i32, desc: "When it\'s time to sit, nothing supports you like a bench. This bench is powered, so you can use appliances like the Microwave." .into(), name: "Powered Bench".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 406745009i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench1".into(), prefab_hash: 406745009i32, desc: "".into(), name: "Bench (Counter Style)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -2127086069i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench2".into(), prefab_hash: -2127086069i32, desc: "".into(), name: "Bench (High Tech Style)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -164622691i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench3".into(), prefab_hash: -164622691i32, desc: "".into(), name: "Bench (Frame Style)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1750375230i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBench4".into(), prefab_hash: 1750375230i32, desc: "".into(), name: "Bench (Workbench Style)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Appliance 1".into(), typ : Class::Appliance }, SlotInfo { name : "Appliance 2".into(), typ : Class::Appliance } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 337416191i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBlastDoor".into(), prefab_hash: 337416191i32, desc: "Airtight and almost undamageable, the original \'Millmar\' series of blast door was designed by off-world mining giant Recurso to protect asteroid-mining facilities from nuclear-incident-level explosive decompression.\nShort of a pocket-sized singularity blinking into the local space-time frame, there is effectively no limit to the pressure these blast doors can contain - ideal for constructing airlocks in pressure-sensitive environments." .into(), name: "Blast Door".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 697908419i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureBlockBed".into(), prefab_hash: 697908419i32, desc: "Description coming.".into(), name: "Block Bed".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Bed".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 378084505i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureBlocker".into(), prefab_hash: 378084505i32, desc: "".into(), name: "Blocker".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1036015121i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableAnalysizer".into(), prefab_hash: 1036015121i32, desc: "".into(), name: "Cable Analyzer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PowerPotential, MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), (LogicType::PowerRequired, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -889269388i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner".into(), prefab_hash: -889269388i32, desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official \'tool\' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." .into(), name: "Cable (Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 980469101i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner3".into(), prefab_hash: 980469101i32, desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so essential, the ODA designated it an official \'tool\' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." .into(), name: "Cable (3-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 318437449i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner3Burnt".into(), prefab_hash: 318437449i32, desc: "".into(), name: "Burnt Cable (3-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2393826i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner3HBurnt".into(), prefab_hash: 2393826i32, desc: "".into(), name: "".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1542172466i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner4".into(), prefab_hash: -1542172466i32, desc: "".into(), name: "Cable (4-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 268421361i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner4Burnt".into(), prefab_hash: 268421361i32, desc: "".into(), name: "Burnt Cable (4-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -981223316i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCorner4HBurnt".into(), prefab_hash: -981223316i32, desc: "".into(), name: "Burnt Heavy Cable (4-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -177220914i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerBurnt".into(), prefab_hash: -177220914i32, desc: "".into(), name: "Burnt Cable (Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -39359015i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerH".into(), prefab_hash: -39359015i32, desc: "".into(), name: "Heavy Cable (Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1843379322i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerH3".into(), prefab_hash: -1843379322i32, desc: "".into(), name: "Heavy Cable (3-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 205837861i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerH4".into(), prefab_hash: 205837861i32, desc: "".into(), name: "Heavy Cable (4-Way Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1931412811i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableCornerHBurnt".into(), prefab_hash: 1931412811i32, desc: "".into(), name: "Burnt Cable (Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 281380789i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse100k".into(), prefab_hash: 281380789i32, desc: "".into(), name: "Fuse (100kW)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1103727120i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse1k".into(), prefab_hash: -1103727120i32, desc: "".into(), name: "Fuse (1kW)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -349716617i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse50k".into(), prefab_hash: -349716617i32, desc: "".into(), name: "Fuse (50kW)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -631590668i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCableFuse5k".into(), prefab_hash: -631590668i32, desc: "".into(), name: "Fuse (5kW)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -175342021i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction".into(), prefab_hash: -175342021i32, desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official \'tool\' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." .into(), name: "Cable (Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1112047202i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction4".into(), prefab_hash: 1112047202i32, desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official \'tool\' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." .into(), name: "Cable (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1756896811i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction4Burnt".into(), prefab_hash: -1756896811i32, desc: "".into(), name: "Burnt Cable (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -115809132i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction4HBurnt".into(), prefab_hash: -115809132i32, desc: "".into(), name: "Burnt Cable (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 894390004i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction5".into(), prefab_hash: 894390004i32, desc: "".into(), name: "Cable (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1545286256i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction5Burnt".into(), prefab_hash: 1545286256i32, desc: "".into(), name: "Burnt Cable (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1404690610i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction6".into(), prefab_hash: -1404690610i32, desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer duty - so much so, the ODA designated it an official \'tool\' during the 3rd Decannual Stationeer Solar Conference.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." .into(), name: "Cable (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -628145954i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction6Burnt".into(), prefab_hash: -628145954i32, desc: "".into(), name: "Burnt Cable (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1854404029i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunction6HBurnt".into(), prefab_hash: 1854404029i32, desc: "".into(), name: "Burnt Cable (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1620686196i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionBurnt".into(), prefab_hash: -1620686196i32, desc: "".into(), name: "Burnt Cable (Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 469451637i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH".into(), prefab_hash: 469451637i32, desc: "".into(), name: "Heavy Cable (3-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -742234680i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH4".into(), prefab_hash: -742234680i32, desc: "".into(), name: "Heavy Cable (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1530571426i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH5".into(), prefab_hash: -1530571426i32, desc: "".into(), name: "Heavy Cable (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1701593300i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH5Burnt".into(), prefab_hash: 1701593300i32, desc: "".into(), name: "Burnt Heavy Cable (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1036780772i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionH6".into(), prefab_hash: 1036780772i32, desc: "".into(), name: "Heavy Cable (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -341365649i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableJunctionHBurnt".into(), prefab_hash: -341365649i32, desc: "".into(), name: "Burnt Cable (Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 605357050i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraight".into(), prefab_hash: 605357050i32, desc: "Carrying power and data alike, cable coil has come to symbolize the innovation, independence and flexibility of Stationeer life - so much so, the ODA designated it an official \'tool\'.\nNormal coil has a maximum wattage of 5kW. For higher-current applications, use Cable Coil (Heavy)." .into(), name: "Cable (Straight)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1196981113i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraightBurnt".into(), prefab_hash: -1196981113i32, desc: "".into(), name: "Burnt Cable (Straight)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -146200530i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraightH".into(), prefab_hash: -146200530i32, desc: "".into(), name: "Heavy Cable (Straight)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2085762089i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCableStraightHBurnt".into(), prefab_hash: 2085762089i32, desc: "".into(), name: "Burnt Cable (Straight)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -342072665i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCamera".into(), prefab_hash: -342072665i32, desc: "Nothing says \'I care\' like a security camera that\'s been linked a Motion Sensor and a Console fitted with a Camera Display.\nBe there, even when you\'re not." .into(), name: "Camera".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1385712131i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCapsuleTankGas".into(), prefab_hash: -1385712131i32, desc: "".into(), name: "Gas Capsule Tank Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1415396263i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCapsuleTankLiquid".into(), prefab_hash: 1415396263i32, desc: "".into(), name: "Liquid Capsule Tank Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1151864003i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCargoStorageMedium".into(), prefab_hash: 1151864003i32, desc: "".into(), name: "Cargo Storage (Medium)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] .into_iter().collect()), (4u32, vec![] .into_iter().collect()), (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] .into_iter().collect()), (9u32, vec![] .into_iter().collect()), (10u32, vec![] .into_iter().collect()), (11u32, vec![] .into_iter() .collect()), (12u32, vec![] .into_iter().collect()), (13u32, vec![] .into_iter().collect()), (14u32, vec![] .into_iter().collect()), (15u32, vec![] .into_iter().collect()), (16u32, vec![] .into_iter() .collect()), (17u32, vec![] .into_iter().collect()), (18u32, vec![] .into_iter().collect()), (19u32, vec![] .into_iter().collect()), (20u32, vec![] .into_iter().collect()), (21u32, vec![] .into_iter() .collect()), (22u32, vec![] .into_iter().collect()), (23u32, vec![] .into_iter().collect()), (24u32, vec![] .into_iter().collect()), (25u32, vec![] .into_iter().collect()), (26u32, vec![] .into_iter() .collect()), (27u32, vec![] .into_iter().collect()), (28u32, vec![] .into_iter().collect()), (29u32, vec![] .into_iter().collect()), (30u32, vec![] .into_iter().collect()), (31u32, vec![] .into_iter() .collect()), (32u32, vec![] .into_iter().collect()), (33u32, vec![] .into_iter().collect()), (34u32, vec![] .into_iter().collect()), (35u32, vec![] .into_iter().collect()), (36u32, vec![] .into_iter() .collect()), (37u32, vec![] .into_iter().collect()), (38u32, vec![] .into_iter().collect()), (39u32, vec![] .into_iter().collect()), (40u32, vec![] .into_iter().collect()), (41u32, vec![] .into_iter() .collect()), (42u32, vec![] .into_iter().collect()), (43u32, vec![] .into_iter().collect()), (44u32, vec![] .into_iter().collect()), (45u32, vec![] .into_iter().collect()), (46u32, vec![] .into_iter() .collect()), (47u32, vec![] .into_iter().collect()), (48u32, vec![] .into_iter().collect()), (49u32, vec![] .into_iter().collect()), (50u32, vec![] .into_iter().collect()), (51u32, vec![] .into_iter() .collect()), (52u32, vec![] .into_iter().collect()), (53u32, vec![] .into_iter().collect()), (54u32, vec![] .into_iter().collect()), (55u32, vec![] .into_iter().collect()), (56u32, vec![] .into_iter() .collect()), (57u32, vec![] .into_iter().collect()), (58u32, vec![] .into_iter().collect()), (59u32, vec![] .into_iter().collect()), (60u32, vec![] .into_iter().collect()), (61u32, vec![] .into_iter() .collect()), (62u32, vec![] .into_iter().collect()), (63u32, vec![] .into_iter().collect()), (64u32, vec![] .into_iter().collect()), (65u32, vec![] .into_iter().collect()), (66u32, vec![] .into_iter() .collect()), (67u32, vec![] .into_iter().collect()), (68u32, vec![] .into_iter().collect()), (69u32, vec![] .into_iter().collect()), (70u32, vec![] .into_iter().collect()), (71u32, vec![] .into_iter() .collect()), (72u32, vec![] .into_iter().collect()), (73u32, vec![] .into_iter().collect()), (74u32, vec![] .into_iter().collect()), (75u32, vec![] .into_iter().collect()), (76u32, vec![] .into_iter() .collect()), (77u32, vec![] .into_iter().collect()), (78u32, vec![] .into_iter().collect()), (79u32, vec![] .into_iter().collect()), (80u32, vec![] .into_iter().collect()), (81u32, vec![] .into_iter() .collect()), (82u32, vec![] .into_iter().collect()), (83u32, vec![] .into_iter().collect()), (84u32, vec![] .into_iter().collect()), (85u32, vec![] .into_iter().collect()), (86u32, vec![] .into_iter() .collect()), (87u32, vec![] .into_iter().collect()), (88u32, vec![] .into_iter().collect()), (89u32, vec![] .into_iter().collect()), (90u32, vec![] .into_iter().collect()), (91u32, vec![] .into_iter() .collect()), (92u32, vec![] .into_iter().collect()), (93u32, vec![] .into_iter().collect()), (94u32, vec![] .into_iter().collect()), (95u32, vec![] .into_iter().collect()), (96u32, vec![] .into_iter() .collect()), (97u32, vec![] .into_iter().collect()), (98u32, vec![] .into_iter().collect()), (99u32, vec![] .into_iter().collect()), (100u32, vec![] .into_iter().collect()), (101u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Ratio, MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1493672123i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCargoStorageSmall".into(), prefab_hash: -1493672123i32, desc: "".into(), name: "Cargo Storage (Small)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (10u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (11u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (12u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (13u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (14u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (15u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (16u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (17u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (18u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (19u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (20u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (21u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (22u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (23u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (24u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (25u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (26u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (27u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (28u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (29u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (30u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (31u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (32u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (33u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (34u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (35u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (36u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (37u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (38u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (39u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (40u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (41u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (42u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (43u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (44u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (45u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (46u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (47u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (48u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (49u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (50u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (51u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Ratio, MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 690945935i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCentrifuge".into(), prefab_hash: 690945935i32, desc: "If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore. \n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. \n Its bigger brother Combustion Centrifuge can be used to process items significantly faster. Items processed by the centrifuge will be de-gassed. \n If openned while powered on, the centrifuge will enter an errored state and reduce its rpm to 0 and then export any items." .into(), name: "Centrifuge".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: true, }, } .into(), ); map.insert( 1167659360i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChair".into(), prefab_hash: 1167659360i32, desc: "One of the universe\'s many chairs, optimized for bipeds with somewhere between zero and two upper limbs." .into(), name: "Chair".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1944858936i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBacklessDouble".into(), prefab_hash: 1944858936i32, desc: "".into(), name: "Chair (Backless Double)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1672275150i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBacklessSingle".into(), prefab_hash: 1672275150i32, desc: "".into(), name: "Chair (Backless Single)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -367720198i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBoothCornerLeft".into(), prefab_hash: -367720198i32, desc: "".into(), name: "Chair (Booth Corner Left)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1640720378i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairBoothMiddle".into(), prefab_hash: 1640720378i32, desc: "".into(), name: "Chair (Booth Middle)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1152812099i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairRectangleDouble".into(), prefab_hash: -1152812099i32, desc: "".into(), name: "Chair (Rectangle Double)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1425428917i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairRectangleSingle".into(), prefab_hash: -1425428917i32, desc: "".into(), name: "Chair (Rectangle Single)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1245724402i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairThickDouble".into(), prefab_hash: -1245724402i32, desc: "".into(), name: "Chair (Thick Double)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1510009608i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChairThickSingle".into(), prefab_hash: -1510009608i32, desc: "".into(), name: "Chair (Thick Single)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -850484480i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteBin".into(), prefab_hash: -850484480i32, desc: "The Stationeer\'s goal is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nLike most Recurso-designed systems, chute bins are simple and robust powered items, allowing items to be manually passed into chute networks by pulling a lever. They can also be programmed with logic to operate automatically, although full automation requires the use items such as a SDB Hopper." .into(), name: "Chute Bin".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Input".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1360330136i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteCorner".into(), prefab_hash: 1360330136i32, desc: "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute corners are fundamental components of chute networks, which allow the transport of items between machines with import/export slots, such as the Furnace and other automatable structures." .into(), name: "Chute (Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -810874728i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalFlipFlopSplitterLeft".into(), prefab_hash: -810874728i32, desc: "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output." .into(), name: "Chute Digital Flip Flop Splitter Left".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Quantity, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::SettingOutput, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output2 }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 163728359i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalFlipFlopSplitterRight".into(), prefab_hash: 163728359i32, desc: "The digital flip flop will toggle between two outputs using a specified ratio (n:1). For example, setting the dial to 2 would allow two items to pass through the primary output before flipping to the secondary output." .into(), name: "Chute Digital Flip Flop Splitter Right".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Quantity, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::SettingOutput, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output2 }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 648608238i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalValveLeft".into(), prefab_hash: 648608238i32, desc: "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial." .into(), name: "Chute Digital Valve Left".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Quantity, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1337091041i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteDigitalValveRight".into(), prefab_hash: -1337091041i32, desc: "The Digital Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute. The valve will automatically close after a certain number of items have passed through. This threshold can be set using the dial." .into(), name: "Chute Digital Valve Right".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Quantity, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1446854725i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteFlipFlopSplitter".into(), prefab_hash: -1446854725i32, desc: "A chute that toggles between two outputs".into(), name: "Chute Flip Flop Splitter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -1469588766i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteInlet".into(), prefab_hash: -1469588766i32, desc: "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute inlet is an aperture by which items can be introduced to import/export networks. Note that its origins in zero-gravity mining means chute inlets are unpowered and permanently open, rather than interactable, allowing objects to be thrown in. They can be connected to logic systems to monitor throughput." .into(), name: "Chute Inlet".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Import".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -611232514i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteJunction".into(), prefab_hash: -611232514i32, desc: "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChute junctions are fundamental components of chute networks, allowing merging or splitting of these networks. When combined with a programmed Sorter, items can be sent down different paths to various machines with import/export slots." .into(), name: "Chute (Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -1022714809i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteOutlet".into(), prefab_hash: -1022714809i32, desc: "The aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nThe chute outlet is an aperture for exiting items from import/export networks. Note that the outlet\'s origins in zero-gravity mining means they are permanently open, rather than interactable, but can be connected to logic systems to monitor throughput." .into(), name: "Chute Outlet".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Export".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 225377225i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteOverflow".into(), prefab_hash: 225377225i32, desc: "The overflow chute will direct materials to its overflow port when the thing connected to its default port is already occupied." .into(), name: "Chute Overflow".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( 168307007i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteStraight".into(), prefab_hash: 168307007i32, desc: "Chutes act as pipes for items. Use them to connect various import/export equipment together such as the Vending Machine and printers like the Autolathe.\nThe aim for any Stationeer is to make off-world survival less of a struggle for themselves, and those who will follow in their footsteps.\nChutes are fundamental components of chute networks, which allow the transport of items between any machine or device with an import/export slot." .into(), name: "Chute (Straight)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -1918892177i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteUmbilicalFemale".into(), prefab_hash: -1918892177i32, desc: "".into(), name: "Umbilical Socket (Chute)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -659093969i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteUmbilicalFemaleSide".into(), prefab_hash: -659093969i32, desc: "".into(), name: "Umbilical Socket Angle (Chute)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -958884053i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureChuteUmbilicalMale".into(), prefab_hash: -958884053i32, desc: "0.Left\n1.Center\n2.Right".into(), name: "Umbilical (Chute)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "Right" .into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 434875271i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteValve".into(), prefab_hash: 434875271i32, desc: "The Chute Valve will stop the flow of materials when set to closed and when set to open, will act like a straight chute." .into(), name: "Chute Valve".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -607241919i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureChuteWindow".into(), prefab_hash: -607241919i32, desc: "Chute\'s with windows let you see what\'s passing through your import/export network. But be warned, they are not insulated as other chutes are. Ices will melt." .into(), name: "Chute (Window)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Transport Slot".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -128473777i32, StructureCircuitHolderTemplate { templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureCircuitHousing".into(), prefab_hash: -128473777i32, desc: "".into(), name: "IC Housing".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::LineNumber, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::LineNumber, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: Some(6u32), has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1238905683i32, StructureCircuitHolderTemplate { templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureCombustionCentrifuge".into(), prefab_hash: 1238905683i32, desc: "The Combustion Centrifuge is a gas powered version of the Centrifuge. If a Recycler or unbalanced Furnace outputs reagent mixture rather than the desired ingots, a centrifuge allows you to reclaim the raw ore.\n It also refines Dirty Ore produced from the Deep Miner and Dirty Ore produced from the Rocket Miner. A combustible fuel mix should be supplied to the gas input, and waste gasses should be vented from the output. \n The machine\'s RPMs must be controlled via the throttle and combustion limiter levers. If the Combustion Centrifuge gains, or loses, RPMs too fast it will experience stress, and eventually grind to a halt. Higher RPMs directly result in faster processing speeds. \n The throttle lever controls the amount of fuel being pulled into the machine, increasing the temperature inside the engine, and leading to an increase in RPM. The limiter lever influences the speed of the combustion, and how much uncombusted gas is in the exhaust. \n Ejecting ore from the Combustion Centrifuge while it is at high RPMs will result in additional stress build up. If turned off while not stressed, the machine will automatically start to brake, and reduce RPMs in a controlled manner.\n\t " .into(), name: "Combustion Centrifuge".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.001f32, radiation_factor: 0.001f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()), (2u32, vec![] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::PressureInput, MemoryAccess::Read), (LogicType::TemperatureInput, MemoryAccess::Read), (LogicType::RatioOxygenInput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioNitrogenInput, MemoryAccess::Read), (LogicType::RatioPollutantInput, MemoryAccess::Read), (LogicType::RatioVolatilesInput, MemoryAccess::Read), (LogicType::RatioWaterInput, MemoryAccess::Read), (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), (LogicType::TotalMolesInput, MemoryAccess::Read), (LogicType::PressureOutput, MemoryAccess::Read), (LogicType::TemperatureOutput, MemoryAccess::Read), (LogicType::RatioOxygenOutput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioNitrogenOutput, MemoryAccess::Read), (LogicType::RatioPollutantOutput, MemoryAccess::Read), (LogicType::RatioVolatilesOutput, MemoryAccess::Read), (LogicType::RatioWaterOutput, MemoryAccess::Read), (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), (LogicType::TotalMolesOutput, MemoryAccess::Read), (LogicType::CombustionInput, MemoryAccess::Read), (LogicType::CombustionOutput, MemoryAccess::Read), (LogicType::CombustionLimiter, MemoryAccess::ReadWrite), (LogicType::Throttle, MemoryAccess::ReadWrite), (LogicType::Rpm, MemoryAccess::Read), (LogicType::Stress, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioSteamInput, MemoryAccess::Read), (LogicType::RatioSteamOutput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: Some(2u32), has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: true, }, } .into(), ); map.insert( -1513030150i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngled".into(), prefab_hash: -1513030150i32, desc: "".into(), name: "Composite Cladding (Angled)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -69685069i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCorner".into(), prefab_hash: -69685069i32, desc: "".into(), name: "Composite Cladding (Angled Corner)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1841871763i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInner".into(), prefab_hash: -1841871763i32, desc: "".into(), name: "Composite Cladding (Angled Corner Inner)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1417912632i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInnerLong".into(), prefab_hash: -1417912632i32, desc: "".into(), name: "Composite Cladding (Angled Corner Inner Long)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 947705066i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInnerLongL".into(), prefab_hash: 947705066i32, desc: "".into(), name: "Composite Cladding (Angled Corner Inner Long L)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1032590967i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerInnerLongR".into(), prefab_hash: -1032590967i32, desc: "".into(), name: "Composite Cladding (Angled Corner Inner Long R)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 850558385i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerLong".into(), prefab_hash: 850558385i32, desc: "".into(), name: "Composite Cladding (Long Angled Corner)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -348918222i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledCornerLongR".into(), prefab_hash: -348918222i32, desc: "".into(), name: "Composite Cladding (Long Angled Mirrored Corner)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -387546514i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingAngledLong".into(), prefab_hash: -387546514i32, desc: "".into(), name: "Composite Cladding (Long Angled)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 212919006i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingCylindrical".into(), prefab_hash: 212919006i32, desc: "".into(), name: "Composite Cladding (Cylindrical)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1077151132i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingCylindricalPanel".into(), prefab_hash: 1077151132i32, desc: "".into(), name: "Composite Cladding (Cylindrical Panel)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1997436771i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingPanel".into(), prefab_hash: 1997436771i32, desc: "".into(), name: "Composite Cladding (Panel)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -259357734i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingRounded".into(), prefab_hash: -259357734i32, desc: "".into(), name: "Composite Cladding (Rounded)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1951525046i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingRoundedCorner".into(), prefab_hash: 1951525046i32, desc: "".into(), name: "Composite Cladding (Rounded Corner)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 110184667i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingRoundedCornerInner".into(), prefab_hash: 110184667i32, desc: "".into(), name: "Composite Cladding (Rounded Corner Inner)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 139107321i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingSpherical".into(), prefab_hash: 139107321i32, desc: "".into(), name: "Composite Cladding (Spherical)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 534213209i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingSphericalCap".into(), prefab_hash: 534213209i32, desc: "".into(), name: "Composite Cladding (Spherical Cap)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1751355139i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeCladdingSphericalCorner".into(), prefab_hash: 1751355139i32, desc: "".into(), name: "Composite Cladding (Spherical Corner)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -793837322i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeDoor".into(), prefab_hash: -793837322i32, desc: "Recurso\'s composite doors are rated to 300kPa, which is more than sufficient for most purposes they were designed for. However, steep pressure differentials are not your friend." .into(), name: "Composite Door".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 324868581i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating".into(), prefab_hash: 324868581i32, desc: "While aesthetics rank low on the ladder of Stationeer concerns, composite gratings allow the concealment of unsightly cables on floors, walls and ceilings." .into(), name: "Composite Floor Grating".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -895027741i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating2".into(), prefab_hash: -895027741i32, desc: "".into(), name: "Composite Floor Grating (Type 2)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1113471627i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating3".into(), prefab_hash: -1113471627i32, desc: "".into(), name: "Composite Floor Grating (Type 3)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 600133846i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGrating4".into(), prefab_hash: 600133846i32, desc: "".into(), name: "Composite Floor Grating (Type 4)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2109695912i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGratingOpen".into(), prefab_hash: 2109695912i32, desc: "".into(), name: "Composite Floor Grating Open".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 882307910i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeFloorGratingOpenRotated".into(), prefab_hash: 882307910i32, desc: "".into(), name: "Composite Floor Grating Open Rotated".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1237302061i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall".into(), prefab_hash: 1237302061i32, desc: "Air-tight and resistant to extreme temperatures, composite walls favor form over function, coming in a range of slightly different, functionally identical varieties." .into(), name: "Composite Wall (Type 1)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 718343384i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall02".into(), prefab_hash: 718343384i32, desc: "".into(), name: "Composite Wall (Type 2)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1574321230i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall03".into(), prefab_hash: 1574321230i32, desc: "".into(), name: "Composite Wall (Type 3)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1011701267i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWall04".into(), prefab_hash: -1011701267i32, desc: "".into(), name: "Composite Wall (Type 4)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2060571986i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWindow".into(), prefab_hash: -2060571986i32, desc: "Air-tight and resistant to extreme temperatures, composite walls come in several charming, near identical varieties - reflecting their designer\'s focus on form over function." .into(), name: "Composite Window".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -688284639i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureCompositeWindowIron".into(), prefab_hash: -688284639i32, desc: "".into(), name: "Iron Window".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -626563514i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureComputer".into(), prefab_hash: -626563514i32, desc: "In some ways a relic, the \'Chonk R1\' was designed by severely conflicted Norsec technicians, who needed a unit that could operate with a wide range of motherboards, while also enduring the worst a new Cadet could throw at it.\nThe result is a machine described by some as \'the only PC likely to survive our collision with a black hole\', while other, less appreciative users regard it as sharing most of its technological DNA with a cheese grater.\nCompatible motherboards:\n- Logic Motherboard\n- Manufacturing Motherboard\n- Sorter Motherboard\n- Communications Motherboard\n- IC Editor Motherboard" .into(), name: "Computer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()), (2u32, vec![] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk }, SlotInfo { name : "Motherboard".into(), typ : Class::Motherboard } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1420719315i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCondensationChamber".into(), prefab_hash: 1420719315i32, desc: "A device for safely condensing gasses into liquids. Liquids and Gasses will both exist safely inside the device. The Chamber will pressurise using its in-built pressure regulator to the target set by the setting wheel.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Condensation Chamber.\n Paired with Evaporation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner." .into(), name: "Condensation Chamber".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.001f32, radiation_factor: 0.000050000002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -965741795i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCondensationValve".into(), prefab_hash: -965741795i32, desc: "Allows for the removal of any liquids from a gas pipe into a liquid pipe. Only allows liquids to pass in one direction." .into(), name: "Condensation Valve".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 235638270i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsole".into(), prefab_hash: 235638270i32, desc: "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed." .into(), name: "Console".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -722284333i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleDual".into(), prefab_hash: -722284333i32, desc: "This Norsec-designed control box manages devices such as the Active Vent, Gas Sensor, Composite Door and others, depending on which circuitboard is inserted into the unit. It has separate data and power ports.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed." .into(), name: "Console Dual".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -53151617i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleLED1x2".into(), prefab_hash: -53151617i32, desc: "0.Default\n1.Percent\n2.Power".into(), name: "LED Display (Medium)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Color, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, "Power".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: true, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1949054743i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleLED1x3".into(), prefab_hash: -1949054743i32, desc: "0.Default\n1.Percent\n2.Power".into(), name: "LED Display (Large)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Color, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, "Power".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: true, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -815193061i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleLED5".into(), prefab_hash: -815193061i32, desc: "0.Default\n1.Percent\n2.Power".into(), name: "LED Display (Small)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Color, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Default".into()), (1u32, "Percent".into()), (2u32, "Power".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: true, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 801677497i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureConsoleMonitor".into(), prefab_hash: 801677497i32, desc: "This Norsec-designed control box manages devices such as the Active Vent, Passive Vent, Gas Sensor, Security Camera and Composite Door, depending on which circuitboard is inserted into the unit. It has a shared data/power port, and a charming sloped interface.\nA completed console displays all devices connected to the current power network. Any devices not related to the installed circuitboard will be greyed-out and inoperable. Consoles are locked once a Data Disk is removed." .into(), name: "Console Monitor".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Circuit Board".into(), typ : Class::Circuitboard }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1961153710i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureControlChair".into(), prefab_hash: -1961153710i32, desc: "Once, these chairs were the heart of space-going behemoths. Now, they\'re items of nostalgia built only by a handful of Stationeers with a sense of history. In other words, kitsch." .into(), name: "Control Chair".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::PositionX, MemoryAccess::Read), (LogicType::PositionY, MemoryAccess::Read), (LogicType::PositionZ, MemoryAccess::Read), (LogicType::VelocityMagnitude, MemoryAccess::Read), (LogicType::VelocityRelativeX, MemoryAccess::Read), (LogicType::VelocityRelativeY, MemoryAccess::Read), (LogicType::VelocityRelativeZ, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Entity".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1968255729i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCornerLocker".into(), prefab_hash: -1968255729i32, desc: "".into(), name: "Corner Locker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -733500083i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureCrateMount".into(), prefab_hash: -733500083i32, desc: "".into(), name: "Container Mount".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "Container Slot".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( 1938254586i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCryoTube".into(), prefab_hash: 1938254586i32, desc: "The exact operation of the Longsleep cryotube remains a commercial secret, with Norsec merely licensing the design. Able to regenerate organ damage when supplied with power and an atmosphere, the Longsleep is a minor miracle of modern medical technology." .into(), name: "CryoTube".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Bed".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1443059329i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCryoTubeHorizontal".into(), prefab_hash: 1443059329i32, desc: "The horizontal variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C." .into(), name: "Cryo Tube Horizontal".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.005f32, radiation_factor: 0.005f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1381321828i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureCryoTubeVertical".into(), prefab_hash: -1381321828i32, desc: "The vertical variant of the cryo tube. Will heal players and organs as well as revive dead players when provided with an atmosphere of Nitrogen below -150C." .into(), name: "Cryo Tube Vertical".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.005f32, radiation_factor: 0.005f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1076425094i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDaylightSensor".into(), prefab_hash: 1076425094i32, desc: "Daylight sensors provide data on whether the current region of your base is in sunlight, and report the exact solar angle. Note that the orientation of the sensor alters the reported solar angle, while Logic systems can be used to offset it." .into(), name: "Daylight Sensor".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Horizontal, MemoryAccess::Read), (LogicType::Vertical, MemoryAccess::Read), (LogicType::SolarAngle, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::SolarIrradiance, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Default".into()), (1u32, "Horizontal".into()), (2u32, "Vertical".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 265720906i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDeepMiner".into(), prefab_hash: 265720906i32, desc: "Drills through terrain until it hits bedrock. Once inside bedrock Dirty Ore is produced roughly every 90s" .into(), name: "Deep Miner".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Export".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1280984102i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDigitalValve".into(), prefab_hash: -1280984102i32, desc: "The digital valve allows Stationeers to create logic-controlled valves and pipe networks." .into(), name: "Digital Valve".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1944485013i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDiode".into(), prefab_hash: 1944485013i32, desc: "".into(), name: "LED".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Color, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: true, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 576516101i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDiodeSlide".into(), prefab_hash: 576516101i32, desc: "".into(), name: "Diode Slide".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -137465079i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDockPortSide".into(), prefab_hash: -137465079i32, desc: "".into(), name: "Dock (Port Side)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1968371847i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureDrinkingFountain".into(), prefab_hash: 1968371847i32, desc: "".into(), name: "".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1668992663i32, StructureCircuitHolderTemplate { templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureElectrolyzer".into(), prefab_hash: -1668992663i32, desc: "The Norsec-designed Electrolyzer splits Water into hydrogen and Oxygen. Employing unknown proprietary technology, the device uses water\'s latent heat as the energy to drive the electrosis process. If there is a downside to this near-miraculous fission, it\'s that the device is limited by the quantity of power available, which is used to maintain the temperature output. In other words, the machine works best with hot gas." .into(), name: "Electrolyzer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::PressureInput, MemoryAccess::Read), (LogicType::TemperatureInput, MemoryAccess::Read), (LogicType::RatioOxygenInput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioNitrogenInput, MemoryAccess::Read), (LogicType::RatioPollutantInput, MemoryAccess::Read), (LogicType::RatioVolatilesInput, MemoryAccess::Read), (LogicType::RatioWaterInput, MemoryAccess::Read), (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), (LogicType::TotalMolesInput, MemoryAccess::Read), (LogicType::PressureOutput, MemoryAccess::Read), (LogicType::TemperatureOutput, MemoryAccess::Read), (LogicType::RatioOxygenOutput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioNitrogenOutput, MemoryAccess::Read), (LogicType::RatioPollutantOutput, MemoryAccess::Read), (LogicType::RatioVolatilesOutput, MemoryAccess::Read), (LogicType::RatioWaterOutput, MemoryAccess::Read), (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), (LogicType::TotalMolesOutput, MemoryAccess::Read), (LogicType::CombustionInput, MemoryAccess::Read), (LogicType::CombustionOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioSteamInput, MemoryAccess::Read), (LogicType::RatioSteamOutput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Idle".into()), (1u32, "Active".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: Some(2u32), has_activate_state: true, has_atmosphere: true, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1307165496i32, StructureLogicDeviceConsumerMemoryTemplate { templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureElectronicsPrinter".into(), prefab_hash: 1307165496i32, desc: "The electronic printer will create any electronic part you need. From circuit boards and electronic devices to solar panels. The choice is yours. Upgrade the device using a Electronic Printer Mod for additional recipes and faster processing speeds." .into(), name: "Electronics Printer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::ReadWrite), (LogicType::CompletionRatio, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: true, }, consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ ("ApplianceChemistryStation".into(), Recipe { tier : MachineTier::TierOne, time : 45f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 1f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ApplianceDeskLampLeft".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron".into(), 2f64), ("Silicon" .into(), 1f64)] .into_iter().collect() }), ("ApplianceDeskLampRight" .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron" .into(), 2f64), ("Silicon".into(), 1f64)] .into_iter().collect() }), ("ApplianceMicrowave".into(), Recipe { tier : MachineTier::TierOne, time : 45f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 1f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("AppliancePackagingMachine".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 1f64), ("Iron".into(), 10f64)] .into_iter().collect() }), ("AppliancePaintMixer".into(), Recipe { tier : MachineTier::TierOne, time : 45f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 1f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("AppliancePlantGeneticAnalyzer".into(), Recipe { tier : MachineTier::TierOne, time : 45f64, energy : 4500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 1f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("AppliancePlantGeneticSplicer".into(), Recipe { tier : MachineTier::TierOne, time : 50f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Inconel".into(), 10f64), ("Stellite".into(), 20f64)] .into_iter().collect() }), ("AppliancePlantGeneticStabilizer".into(), Recipe { tier : MachineTier::TierOne, time : 50f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Inconel".into(), 10f64), ("Stellite".into(), 20f64)] .into_iter().collect() }), ("ApplianceReagentProcessor".into(), Recipe { tier : MachineTier::TierOne, time : 45f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 1f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ApplianceTabletDock".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 750f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 1f64), ("Iron".into(), 5f64), ("Silicon".into(), 1f64)] .into_iter() .collect() }), ("AutolathePrinterMod".into(), Recipe { tier : MachineTier::TierTwo, time : 180f64, energy : 72000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter().collect() }), ("Battery_Wireless_cell".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 10000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 2f64), ("Iron".into(), 2f64)] .into_iter().collect() }), ("Battery_Wireless_cell_Big" .into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 20000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 15f64), ("Gold".into(), 5f64), ("Steel" .into(), 5f64)] .into_iter().collect() }), ("CartridgeAtmosAnalyser" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CartridgeConfiguration".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), 1f64)] .into_iter() .collect() }), ("CartridgeElectronicReader".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CartridgeGPS".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CartridgeMedicalAnalyser".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CartridgeNetworkAnalyser".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CartridgeOreScanner".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CartridgeOreScannerColor".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Constantan".into(), 5f64), ("Electrum".into(), 5f64), ("Invar".into(), 5f64), ("Silicon".into(), 5f64)] .into_iter().collect() }), ("CartridgePlantAnalyser".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), 1f64)] .into_iter() .collect() }), ("CartridgeTracker".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CircuitboardAdvAirlockControl".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CircuitboardAirControl".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64)] .into_iter().collect() }), ("CircuitboardAirlockControl".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CircuitboardDoorControl".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64)] .into_iter().collect() }), ("CircuitboardGasDisplay" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CircuitboardGraphDisplay".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64)] .into_iter().collect() }), ("CircuitboardHashDisplay".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64)] .into_iter().collect() }), ("CircuitboardModeControl" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64)] .into_iter() .collect() }), ("CircuitboardPowerControl".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64)] .into_iter().collect() }), ("CircuitboardShipDisplay" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64)] .into_iter() .collect() }), ("CircuitboardSolarControl".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64)] .into_iter().collect() }), ("DynamicLight".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ElectronicPrinterMod".into(), Recipe { tier : MachineTier::TierOne, time : 180f64, energy : 72000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() .collect() }), ("ItemAdvancedTablet".into(), Recipe { tier : MachineTier::TierTwo, time : 60f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 6i64, reagents : vec![("Copper".into(), 5.5f64), ("Electrum".into(), 1f64), ("Gold".into(), 12f64), ("Iron".into(), 3f64), ("Solder".into(), 5f64), ("Steel".into(), 2f64)] .into_iter() .collect() }), ("ItemAreaPowerControl".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Iron" .into(), 5f64), ("Solder".into(), 3f64)] .into_iter().collect() }), ("ItemBatteryCell".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 2f64), ("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemBatteryCellLarge".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 20000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 5f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemBatteryCellNuclear".into(), Recipe { tier : MachineTier::TierTwo, time : 180f64, energy : 360000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Astroloy".into(), 10f64), ("Inconel".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() .collect() }), ("ItemBatteryCharger".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemBatteryChargerSmall".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 250f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 2f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemCableAnalyser".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 1f64), ("Silicon".into(), 2f64)] .into_iter().collect() }), ("ItemCableCoil" .into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Copper".into(), 0.5f64)] .into_iter().collect() }), ("ItemCableCoilHeavy".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 0.5f64), ("Gold".into(), 0.5f64)] .into_iter().collect() }), ("ItemCableFuse".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" .into(), 5f64)] .into_iter().collect() }), ("ItemCreditCard".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Silicon".into(), 5f64)] .into_iter().collect() }), ("ItemDataDisk".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64)] .into_iter().collect() }), ("ItemElectronicParts".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 10f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold" .into(), 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemFlashingLight".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 3f64), ("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemHEMDroidRepairKit".into(), Recipe { tier : MachineTier::TierTwo, time : 40f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), 10f64), ("Inconel".into(), 5f64), ("Solder".into(), 5f64)] .into_iter().collect() }), ("ItemIntegratedCircuit10".into(), Recipe { tier : MachineTier::TierOne, time : 40f64, energy : 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), 5f64), ("Gold".into(), 10f64), ("Solder".into(), 2f64), ("Steel" .into(), 4f64)] .into_iter().collect() }), ("ItemKitAIMeE".into(), Recipe { tier : MachineTier::TierTwo, time : 25f64, energy : 2200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 7i64, reagents : vec![("Astroloy".into(), 10f64), ("Constantan".into(), 8f64), ("Copper".into(), 5f64), ("Electrum".into(), 15f64), ("Gold".into(), 5f64), ("Invar".into(), 7f64), ("Steel".into(), 22f64)] .into_iter().collect() }), ("ItemKitAdvancedComposter".into(), Recipe { tier : MachineTier::TierTwo, time : 55f64, energy : 20000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 15f64), ("Electrum".into(), 20f64), ("Solder".into(), 5f64), ("Steel".into(), 30f64)] .into_iter().collect() }), ("ItemKitAdvancedFurnace".into(), Recipe { tier : MachineTier::TierTwo, time : 180f64, energy : 36000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 6i64, reagents : vec![("Copper".into(), 25f64), ("Electrum".into(), 15f64), ("Gold" .into(), 5f64), ("Silicon".into(), 6f64), ("Solder".into(), 8f64), ("Steel".into(), 30f64)] .into_iter().collect() }), ("ItemKitAdvancedPackagingMachine".into(), Recipe { tier : MachineTier::TierTwo, time : 60f64, energy : 18000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Constantan".into(), 10f64), ("Copper".into(), 10f64), ("Electrum".into(), 15f64), ("Steel" .into(), 20f64)] .into_iter().collect() }), ("ItemKitAutoMinerSmall" .into(), Recipe { tier : MachineTier::TierTwo, time : 90f64, energy : 9000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 5i64, reagents : vec![("Copper".into(), 15f64), ("Electrum".into(), 50f64), ("Invar" .into(), 25f64), ("Iron".into(), 15f64), ("Steel".into(), 100f64)] .into_iter().collect() }), ("ItemKitAutomatedOven".into(), Recipe { tier : MachineTier::TierTwo, time : 50f64, energy : 15000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 5i64, reagents : vec![("Constantan" .into(), 5f64), ("Copper".into(), 15f64), ("Gold".into(), 10f64), ("Solder".into(), 10f64), ("Steel".into(), 25f64)] .into_iter() .collect() }), ("ItemKitBattery".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 20f64), ("Gold" .into(), 20f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemKitBatteryLarge".into(), Recipe { tier : MachineTier::TierTwo, time : 240f64, energy : 96000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 6i64, reagents : vec![("Copper".into(), 35f64), ("Electrum".into(), 10f64), ("Gold".into(), 35f64), ("Silicon".into(), 5f64), ("Steel".into(), 35f64), ("Stellite".into(), 2f64)] .into_iter().collect() }), ("ItemKitBeacon".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 4f64), ("Solder".into(), 2f64), ("Steel".into(), 5f64)] .into_iter() .collect() }), ("ItemKitComputer".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" .into(), 5f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemKitConsole".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 3f64), ("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemKitDynamicGenerator".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Gold".into(), 15f64), ("Nickel" .into(), 15f64), ("Solder".into(), 5f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemKitElevator".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 4f64), ("Solder".into(), 2f64), ("Steel".into(), 2f64)] .into_iter().collect() }), ("ItemKitFridgeBig".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 10f64), ("Gold" .into(), 5f64), ("Iron".into(), 20f64), ("Steel".into(), 15f64)] .into_iter().collect() }), ("ItemKitFridgeSmall".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 2f64), ("Iron".into(), 10f64)] .into_iter() .collect() }), ("ItemKitGasGenerator".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Iron" .into(), 50f64)] .into_iter().collect() }), ("ItemKitGroundTelescope" .into(), Recipe { tier : MachineTier::TierOne, time : 150f64, energy : 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), 15f64), ("Solder".into(), 10f64), ("Steel" .into(), 25f64)] .into_iter().collect() }), ("ItemKitGrowLight" .into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Electrum".into(), 10f64), ("Steel" .into(), 5f64)] .into_iter().collect() }), ("ItemKitHarvie".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 5i64, reagents : vec![("Copper".into(), 15f64), ("Electrum".into(), 10f64), ("Silicon".into(), 5f64), ("Solder".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() .collect() }), ("ItemKitHorizontalAutoMiner".into(), Recipe { tier : MachineTier::TierTwo, time : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 5i64, reagents : vec![("Copper".into(), 7f64), ("Electrum".into(), 25f64), ("Invar".into(), 15f64), ("Iron".into(), 8f64), ("Steel".into(), 60f64)] .into_iter().collect() }), ("ItemKitHydroponicStation".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 20f64), ("Gold" .into(), 5f64), ("Nickel".into(), 5f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemKitLandingPadAtmos".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemKitLandingPadBasic".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Steel" .into(), 5f64)] .into_iter().collect() }), ("ItemKitLandingPadWaypoint".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Steel" .into(), 5f64)] .into_iter().collect() }), ("ItemKitLargeSatelliteDish".into(), Recipe { tier : MachineTier::TierOne, time : 240f64, energy : 72000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Astroloy".into(), 100f64), ("Inconel".into(), 50f64), ("Waspaloy".into(), 20f64)] .into_iter() .collect() }), ("ItemKitLogicCircuit".into(), Recipe { tier : MachineTier::TierOne, time : 40f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Solder".into(), 2f64), ("Steel".into(), 4f64)] .into_iter() .collect() }), ("ItemKitLogicInputOutput".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Gold" .into(), 1f64)] .into_iter().collect() }), ("ItemKitLogicMemory" .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64)] .into_iter() .collect() }), ("ItemKitLogicProcessor".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 2f64)] .into_iter().collect() }), ("ItemKitLogicSwitch" .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64)] .into_iter() .collect() }), ("ItemKitLogicTransmitter".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 1f64), ("Electrum".into(), 3f64), ("Gold".into(), 2f64), ("Silicon".into(), 5f64)] .into_iter().collect() }), ("ItemKitMusicMachines".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64)] .into_iter().collect() }), ("ItemKitPowerTransmitter".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 7f64), ("Gold" .into(), 5f64), ("Steel".into(), 3f64)] .into_iter().collect() }), ("ItemKitPowerTransmitterOmni".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 8f64), ("Gold" .into(), 4f64), ("Steel".into(), 4f64)] .into_iter().collect() }), ("ItemKitPressurePlate".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64)] .into_iter().collect() }), ("ItemKitResearchMachine".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 10f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold" .into(), 2f64), ("Iron".into(), 9f64)] .into_iter().collect() }), ("ItemKitSatelliteDish".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), 15f64), ("Solder".into(), 10f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemKitSensor" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 10f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemKitSmallSatelliteDish" .into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 5f64)] .into_iter() .collect() }), ("ItemKitSolarPanel".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 20f64), ("Gold" .into(), 5f64), ("Steel".into(), 15f64)] .into_iter().collect() }), ("ItemKitSolarPanelBasic".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold" .into(), 2f64), ("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemKitSolarPanelBasicReinforced".into(), Recipe { tier : MachineTier::TierTwo, time : 120f64, energy : 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 10f64), ("Electrum".into(), 2f64), ("Invar".into(), 10f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemKitSolarPanelReinforced" .into(), Recipe { tier : MachineTier::TierTwo, time : 120f64, energy : 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Astroloy".into(), 15f64), ("Copper".into(), 20f64), ("Electrum".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() .collect() }), ("ItemKitSolidGenerator".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Iron" .into(), 50f64)] .into_iter().collect() }), ("ItemKitSpeaker".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Steel".into(), 5f64)] .into_iter() .collect() }), ("ItemKitStirlingEngine".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 20f64), ("Gold" .into(), 5f64), ("Steel".into(), 30f64)] .into_iter().collect() }), ("ItemKitTransformer".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 5f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemKitTransformerSmall".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 1f64), ("Iron".into(), 10f64)] .into_iter() .collect() }), ("ItemKitTurbineGenerator".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 4f64), ("Iron".into(), 5f64), ("Solder".into(), 4f64)] .into_iter().collect() }), ("ItemKitUprightWindTurbine".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 5f64), ("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemKitVendingMachine".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 15000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), 50f64), ("Gold".into(), 50f64), ("Solder" .into(), 10f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemKitVendingMachineRefrigerated".into(), Recipe { tier : MachineTier::TierTwo, time : 60f64, energy : 25000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), 80f64), ("Gold".into(), 60f64), ("Solder".into(), 30f64), ("Steel".into(), 40f64)] .into_iter().collect() }), ("ItemKitWeatherStation".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 3f64), ("Iron".into(), 8f64), ("Steel".into(), 3f64)] .into_iter().collect() }), ("ItemKitWindTurbine".into(), Recipe { tier : MachineTier::TierTwo, time : 60f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Electrum".into(), 5f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemLabeller" .into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 800f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 1f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemLaptop".into(), Recipe { tier : MachineTier::TierTwo, time : 60f64, energy : 18000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 5i64, reagents : vec![("Copper".into(), 5.5f64), ("Electrum".into(), 5f64), ("Gold".into(), 12f64), ("Solder".into(), 5f64), ("Steel".into(), 2f64)] .into_iter().collect() }), ("ItemPowerConnector".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 3f64), ("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemResearchCapsule".into(), Recipe { tier : MachineTier::TierOne, time : 3f64, energy : 400f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Iron".into(), 9f64)] .into_iter().collect() }), ("ItemResearchCapsuleGreen".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 10f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Astroloy".into(), 2f64), ("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Iron".into(), 9f64)] .into_iter().collect() }), ("ItemResearchCapsuleRed".into(), Recipe { tier : MachineTier::TierOne, time : 8f64, energy : 50f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Iron".into(), 2f64)] .into_iter() .collect() }), ("ItemResearchCapsuleYellow".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Astroloy".into(), 3f64), ("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Iron".into(), 9f64)] .into_iter().collect() }), ("ItemSoundCartridgeBass".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64), ("Silicon".into(), 2f64)] .into_iter() .collect() }), ("ItemSoundCartridgeDrums".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 2f64), ("Silicon".into(), 2f64)] .into_iter().collect() }), ("ItemSoundCartridgeLeads".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 2f64), ("Silicon".into(), 2f64)] .into_iter().collect() }), ("ItemSoundCartridgeSynth".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 2f64), ("Silicon".into(), 2f64)] .into_iter().collect() }), ("ItemTablet".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Solder".into(), 5f64)] .into_iter().collect() }), ("ItemWallLight" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 10f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 1f64)] .into_iter() .collect() }), ("MotherboardComms".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 5f64), ("Electrum".into(), 2f64), ("Gold".into(), 5f64), ("Silver".into(), 5f64)] .into_iter().collect() }), ("MotherboardLogic".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64)] .into_iter().collect() }), ("MotherboardProgrammableChip".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64)] .into_iter().collect() }), ("MotherboardRockets" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 5f64), ("Solder".into(), 5f64)] .into_iter() .collect() }), ("MotherboardSorter".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Gold".into(), 5f64), ("Silver" .into(), 5f64)] .into_iter().collect() }), ("PipeBenderMod".into(), Recipe { tier : MachineTier::TierTwo, time : 180f64, energy : 72000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() .collect() }), ("PortableComposter".into(), Recipe { tier : MachineTier::TierOne, time : 55f64, energy : 20000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 15f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("PortableSolarPanel".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 3f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ToolPrinterMod" .into(), Recipe { tier : MachineTier::TierTwo, time : 180f64, energy : 72000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Constantan".into(), 8f64), ("Electrum".into(), 8f64), ("Solder".into(), 8f64), ("Steel".into(), 35f64)] .into_iter() .collect() }) ] .into_iter() .collect(), }), memory: MemoryInfo { instructions: Some( vec![ ("DeviceSetLock".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : InstructionPartType::Bool8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(48u32) }] .into_iter().collect() }), ("EjectAllReagents".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }), ("EjectReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }), ("ExecuteRecipe".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("JumpIfNextInvalid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("JumpToAddress".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("MissingRecipeReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, Some(62u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("StackPointer".into(), Instruction { description : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("WaitUntilNextValid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }) ] .into_iter() .collect(), ), memory_access: MemoryAccess::ReadWrite, memory_size: 64u32, }, } .into(), ); map.insert( -827912235i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorLevelFront".into(), prefab_hash: -827912235i32, desc: "".into(), name: "Elevator Level (Cabled)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ElevatorSpeed, MemoryAccess::ReadWrite), (LogicType::ElevatorLevel, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Elevator, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Elevator, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 2060648791i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorLevelIndustrial".into(), prefab_hash: 2060648791i32, desc: "".into(), name: "Elevator Level".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ElevatorSpeed, MemoryAccess::ReadWrite), (LogicType::ElevatorLevel, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Elevator, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Elevator, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 826144419i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorShaft".into(), prefab_hash: 826144419i32, desc: "".into(), name: "Elevator Shaft (Cabled)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ElevatorSpeed, MemoryAccess::ReadWrite), (LogicType::ElevatorLevel, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Elevator, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Elevator, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1998354978i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureElevatorShaftIndustrial".into(), prefab_hash: 1998354978i32, desc: "".into(), name: "Elevator Shaft".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::ElevatorSpeed, MemoryAccess::ReadWrite), (LogicType::ElevatorLevel, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Elevator, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Elevator, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1668452680i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureEmergencyButton".into(), prefab_hash: 1668452680i32, desc: "Description coming.".into(), name: "Important Button".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 2035781224i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureEngineMountTypeA1".into(), prefab_hash: 2035781224i32, desc: "".into(), name: "Engine Mount (Type A1)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1429782576i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureEvaporationChamber".into(), prefab_hash: -1429782576i32, desc: "A device for safely evaporating liquids into gasses. Liquids and Gasses will both exist safely inside the device. Lowering the pressure target of the in-built back pressure regulator using the setting wheel will change the boiling temperature of liquids inside.\n The secondary gas input on the left is a heat-exchanger input and allows for heat exchange between the secondary input pipe and the internal atmosphere of the Evaporation Chamber. \n Paired with Condensation Chamber Stationeers can exploit the phase change properties of gases to build a DIY air conditioner." .into(), name: "Evaporation Chamber".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.001f32, radiation_factor: 0.000050000002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 195298587i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureExpansionValve".into(), prefab_hash: 195298587i32, desc: "Allows for moving liquids from a liquid pipe into a gas pipe. Only allows liquids to pass in one direction. Typically this is done to allow the liquid to evaporate into a gas as part of an airconditioning loop." .into(), name: "Expansion Valve".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1622567418i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFairingTypeA1".into(), prefab_hash: 1622567418i32, desc: "".into(), name: "Fairing (Type A1)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -104908736i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFairingTypeA2".into(), prefab_hash: -104908736i32, desc: "".into(), name: "Fairing (Type A2)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1900541738i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFairingTypeA3".into(), prefab_hash: -1900541738i32, desc: "".into(), name: "Fairing (Type A3)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -348054045i32, StructureCircuitHolderTemplate { templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureFiltration".into(), prefab_hash: -348054045i32, desc: "The Filtration Unit is based on a long-standing ExMin system, itself based on older designs of uncertain provenance. It is available in the Kit (Atmospherics).\nThe device has nonetheless proven indispensable for Stationeer atmospheric systems, as it can filter two gases simultaneously from a single pipe network using a dual filter array. The unit has an input, and a filter output as well as an unfiltered outlet for any residual gases.\n" .into(), name: "Filtration".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()), (2u32, vec![] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::PressureInput, MemoryAccess::Read), (LogicType::TemperatureInput, MemoryAccess::Read), (LogicType::RatioOxygenInput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioNitrogenInput, MemoryAccess::Read), (LogicType::RatioPollutantInput, MemoryAccess::Read), (LogicType::RatioVolatilesInput, MemoryAccess::Read), (LogicType::RatioWaterInput, MemoryAccess::Read), (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), (LogicType::TotalMolesInput, MemoryAccess::Read), (LogicType::PressureOutput, MemoryAccess::Read), (LogicType::TemperatureOutput, MemoryAccess::Read), (LogicType::RatioOxygenOutput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioNitrogenOutput, MemoryAccess::Read), (LogicType::RatioPollutantOutput, MemoryAccess::Read), (LogicType::RatioVolatilesOutput, MemoryAccess::Read), (LogicType::RatioWaterOutput, MemoryAccess::Read), (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), (LogicType::TotalMolesOutput, MemoryAccess::Read), (LogicType::PressureOutput2, MemoryAccess::Read), (LogicType::TemperatureOutput2, MemoryAccess::Read), (LogicType::RatioOxygenOutput2, MemoryAccess::Read), (LogicType::RatioCarbonDioxideOutput2, MemoryAccess::Read), (LogicType::RatioNitrogenOutput2, MemoryAccess::Read), (LogicType::RatioPollutantOutput2, MemoryAccess::Read), (LogicType::RatioVolatilesOutput2, MemoryAccess::Read), (LogicType::RatioWaterOutput2, MemoryAccess::Read), (LogicType::RatioNitrousOxideOutput2, MemoryAccess::Read), (LogicType::TotalMolesOutput2, MemoryAccess::Read), (LogicType::CombustionInput, MemoryAccess::Read), (LogicType::CombustionOutput, MemoryAccess::Read), (LogicType::CombustionOutput2, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenOutput2, MemoryAccess::Read), (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), (LogicType::RatioLiquidOxygenOutput2, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesOutput2, MemoryAccess::Read), (LogicType::RatioSteamInput, MemoryAccess::Read), (LogicType::RatioSteamOutput, MemoryAccess::Read), (LogicType::RatioSteamOutput2, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideOutput2, MemoryAccess::Read), (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), (LogicType::RatioLiquidPollutantOutput2, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideOutput2, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Idle".into()), (1u32, "Active".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Gas Filter".into(), typ : Class::GasFilter }, SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Waste }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: Some(2u32), has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1529819532i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFlagSmall".into(), prefab_hash: -1529819532i32, desc: "".into(), name: "Small Flag".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1535893860i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFlashingLight".into(), prefab_hash: -1535893860i32, desc: "Few objects or ideas are as clearly and transparently named as the Flashing Light, although fans of scrupulous accuracy have been known to refer to it by its full, official title: \'Default Yellow Flashing Light\'." .into(), name: "Flashing Light".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 839890807i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFlatBench".into(), prefab_hash: 839890807i32, desc: "".into(), name: "Bench (Flat)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Seat".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1048813293i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFloorDrain".into(), prefab_hash: 1048813293i32, desc: "A passive liquid floor inlet that quickly removes liquids in one direction from the world into the connected pipe network. It will equalise gasses with the world atmosphere also." .into(), name: "Passive Liquid Inlet".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1432512808i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrame".into(), prefab_hash: 1432512808i32, desc: "More durable than the Iron Frame, steel frames also have several variations for more complex constructions, such as the Steel Frame (Corner) and Steel Frame (Corner Cut). Like iron frames, they are placed then completed by welding Steel Sheets to the open framework." .into(), name: "Steel Frame".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2112390778i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameCorner".into(), prefab_hash: -2112390778i32, desc: "More durable than the Iron Frame, steel frames also offer several variations for more complex lattice constructions. \nWith a little patience and maneuvering, the corner frame\'s Gothic-inspired silhouette allows the creation of ogival arches and even more ambitious architecture, although they are not airtight and cannot be built on." .into(), name: "Steel Frame (Corner)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 271315669i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameCornerCut".into(), prefab_hash: 271315669i32, desc: "0.Mode0\n1.Mode1".into(), name: "Steel Frame (Corner Cut)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1240951678i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameIron".into(), prefab_hash: -1240951678i32, desc: "".into(), name: "Iron Frame".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -302420053i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFrameSide".into(), prefab_hash: -302420053i32, desc: "More durable than the Iron Frame, steel frames also provide variations for more ornate constructions." .into(), name: "Steel Frame (Side)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 958476921i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFridgeBig".into(), prefab_hash: 958476921i32, desc: "The Xigo Koolaid fridge is a self-cooling storage device with 15 slots that preserves food when powered and turned on. While many users have complained about the placement of the power switch, its place in the pantheon of off-world whiteware is unquestioned.\n \nWith its own permanent internal atmosphere, the Koolaid fridge slows the decay of food by maintaining an optimal internal temperature. Its power usage varies on the external temperature against which it must balance its internal temperature. As such, it must shed heat to operate, so the Koolaid fridge DOES NOT work in a vacuum.\n \nAlso, don\'t leave the door open, as it will equalize with the current world temperature. And maybe start to beep.\n\nFor more information about food preservation, visit the food decay section of the Stationpedia." .into(), name: "Fridge (Large)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (10u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (11u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (12u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (13u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (14u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 751887598i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFridgeSmall".into(), prefab_hash: 751887598i32, desc: "Essentially a heavily insulated box that allows users to pipe in any desired atmosphere, the Recurso Minibar fridge was a simple solution to the problem of food decay. It stores a small number of items, at any temperature you can muster.\n \n For more information about food preservation, visit the food decay section of the Stationpedia." .into(), name: "Fridge Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1947944864i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureFurnace".into(), prefab_hash: 1947944864i32, desc: "The Zhurong furnace employs a high-temperature gas mixture of Oxygen and Volatiles to smelt ingots and a range of alloys as raw materials for fabricators.\nA basic gas mixture can be achieved by adding Ice (Oxite) and Ice (Volatiles) in a 1:2 ratio directly to the furnace, but more complex alloys will require careful management of a dedicated gas mixing network. Exact ingredient ratios must be observed. Likewise, smelting ores at insufficient temperatures will produce reagents, which must be recycled.\nIf liquids are present in the furnace, they will gather there until the furnace is connected to a liquid pipe network." .into(), name: "Furnace".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output2 }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: true, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: false, has_open_state: true, has_reagents: true, }, } .into(), ); map.insert( 1033024712i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeA1".into(), prefab_hash: 1033024712i32, desc: "".into(), name: "Fuselage (Type A1)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1533287054i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeA2".into(), prefab_hash: -1533287054i32, desc: "".into(), name: "Fuselage (Type A2)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1308115015i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeA4".into(), prefab_hash: 1308115015i32, desc: "".into(), name: "Fuselage (Type A4)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 147395155i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureFuselageTypeC5".into(), prefab_hash: 147395155i32, desc: "".into(), name: "Fuselage (Type C5)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1165997963i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasGenerator".into(), prefab_hash: 1165997963i32, desc: "".into(), name: "Gas Fuel Generator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.01f32, radiation_factor: 0.01f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PowerGeneration, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 2104106366i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasMixer".into(), prefab_hash: 2104106366i32, desc: "Indispensable for producing precise atmospheric ratios, this gas mixer blends two gases in proportions ranging anywhere from 0-100%." .into(), name: "Gas Mixer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1252983604i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasSensor".into(), prefab_hash: -1252983604i32, desc: "Gas sensors are designed to monitor and report basic atmospheric information, including temperature, pressure, and gas ratios. They also make wonderful wedding presents." .into(), name: "Gas Sensor".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1632165346i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasTankStorage".into(), prefab_hash: 1632165346i32, desc: "When connected to a pipe network, the tank storage unit allows you to refill a Canister, as well as read various atmospheric data from the Gas Canister." .into(), name: "Gas Tank Storage".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1680477930i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasUmbilicalFemale".into(), prefab_hash: -1680477930i32, desc: "".into(), name: "Umbilical Socket (Gas)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -648683847i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasUmbilicalFemaleSide".into(), prefab_hash: -648683847i32, desc: "".into(), name: "Umbilical Socket Angle (Gas)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1814939203i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGasUmbilicalMale".into(), prefab_hash: -1814939203i32, desc: "0.Left\n1.Center\n2.Right".into(), name: "Umbilical (Gas)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "Right" .into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -324331872i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGlassDoor".into(), prefab_hash: -324331872i32, desc: "0.Operate\n1.Logic".into(), name: "Glass Door".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -214232602i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGovernedGasEngine".into(), prefab_hash: -214232602i32, desc: "The most reliable of all the rocket engines, the Pumped Gas Engine runs on a 2:1 mix of Volatiles to Oxygen gas." .into(), name: "Pumped Gas Engine".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::Throttle, MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::PassedMoles, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -619745681i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGroundBasedTelescope".into(), prefab_hash: -619745681i32, desc: "A telescope that can be oriented to observe Celestial Bodies. When within full alignment will show orbital information for that celestial object. Atmospheric conditions may disrupt the ability to observe some objects at some times of day. To collect Horizontal and Vertical values you can use a Rocket Celestial Tracker while it is in orbit, or a Daylight Sensor for primary body data." .into(), name: "Telescope".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::HorizontalRatio, MemoryAccess::ReadWrite), (LogicType::VerticalRatio, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::CelestialHash, MemoryAccess::Read), (LogicType::AlignmentError, MemoryAccess::Read), (LogicType::DistanceAu, MemoryAccess::Read), (LogicType::OrbitPeriod, MemoryAccess::Read), (LogicType::Inclination, MemoryAccess::Read), (LogicType::Eccentricity, MemoryAccess::Read), (LogicType::SemiMajorAxis, MemoryAccess::Read), (LogicType::DistanceKm, MemoryAccess::Read), (LogicType::CelestialParentHash, MemoryAccess::Read), (LogicType::TrueAnomaly, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1758710260i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureGrowLight".into(), prefab_hash: -1758710260i32, desc: "Agrizero\'s leading hydroponic lighting system, the GrowUp UV light supplements sunshine in low light or sun-distant conditions. The unit adds growability over the space of a grid, so requires proximate placement to work. " .into(), name: "Grow Light".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 958056199i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHarvie".into(), prefab_hash: 958056199i32, desc: "Use above a Hydroponics Tray or Hydroponics Device to manage the planting and harvest of your crops. It contains a button that will allow you to activate it\'s modes, or connect it to a logic system to do this for you. The modes indicate current growth status of the plant below. Import is used for planting, and harvested plants are sent to export." .into(), name: "Harvie".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::Plant, MemoryAccess::Write), (LogicType::Harvest, MemoryAccess::Write), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Idle".into()), (1u32, "Happy".into()), (2u32, "UnHappy" .into()), (3u32, "Dead".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::Plant }, SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Hand".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 944685608i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHeatExchangeLiquidtoGas".into(), prefab_hash: 944685608i32, desc: "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn\'t stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe \'N Flow-P\' has four connections, allowing you to pass separate liquid and gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to devices like a Volume Pump or a Liquid Back Volume Regulator." .into(), name: "Heat Exchanger - Liquid + Gas".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 21266291i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHeatExchangerGastoGas".into(), prefab_hash: 21266291i32, desc: "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn\'t stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe \'N Flow-P\' has four connections, allowing you to pass two gas networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to gas management devices like a Volume Pump or a Back Pressure Regulator." .into(), name: "Heat Exchanger - Gas".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -613784254i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHeatExchangerLiquidtoLiquid".into(), prefab_hash: -613784254i32, desc: "The original specs for the N Series Flow-P heat exchanger were rumored to have been scrawled on the back of a burger receipt by a bored Sinotai designer riding up the Brazilian space elevator, but that hasn\'t stopped it becoming one of the most widely-copied heat exchanger designs in the Solar System.\nThe \'N Flow-P\' has four connections, allowing you to pass two liquid networks into the unit, which then works to equalize temperature across the two separate networks.\nAs the N Flow-P is a passive system, it equalizes pressure across the entire of each individual network, unless connected to liquid management devices like a Liquid Volume Pump or a Liquid Back Volume Regulator.\n" .into(), name: "Heat Exchanger - Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1070427573i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHorizontalAutoMiner".into(), prefab_hash: 1070427573i32, desc: "The Recurso OGRE (Orthogonal Ground Rotating Excavator) is a base structure with attached mining vehicle, which will mine a horizontal shaft up to X meters long. When full, the mining vehicle will return to the base to empty itself, before returning to dig. If it encounters empty space, it will also return to base and await instruction. The unit will return if deactivated.\n \nThe OGRE can be connected to a chute system, and is controllable by a logic network. Note that the OGRE outputs more ore than a conventional Mining Drill over the same area, due to more efficient processing.\n\nMODES\nIdle - 0\nMining - 1\nReturning - 2\nDepostingOre - 3\nFinished - 4\n" .into(), name: "OGRE".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1888248335i32, StructureLogicDeviceConsumerMemoryTemplate { templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureHydraulicPipeBender".into(), prefab_hash: -1888248335i32, desc: "A go-to tool for all your atmospheric and plumbing needs, the ExMin Atmoprinter will create everything from pipes, pumps and tanks, to vents and filters, ensuring your survival in any environment. Upgrade the Atmoprinter using a Pipe Bender Mod for additional recipes and faster processing speeds." .into(), name: "Hydraulic Pipe Bender".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::ReadWrite), (LogicType::CompletionRatio, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: true, }, consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ ("ApplianceSeedTray".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 10f64), ("Silicon".into(), 15f64)] .into_iter().collect() }), ("ItemActiveVent".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 1f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemAdhesiveInsulation".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Silicon".into(), 1f64), ("Steel".into(), 0.5f64)] .into_iter().collect() }), ("ItemDynamicAirCon".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Gold".into(), 5f64), ("Silver".into(), 5f64), ("Solder".into(), 5f64), ("Steel".into(), 20f64)] .into_iter() .collect() }), ("ItemDynamicScrubber".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Gold".into(), 5f64), ("Invar" .into(), 5f64), ("Solder".into(), 5f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemGasCanisterEmpty".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemGasCanisterSmart".into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Silicon".into(), 2f64), ("Steel".into(), 15f64)] .into_iter().collect() }), ("ItemGasFilterCarbonDioxide".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterCarbonDioxideL" .into(), Recipe { tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Invar".into(), 1f64), ("Steel".into(), 5f64), ("Stellite" .into(), 1f64)] .into_iter().collect() }), ("ItemGasFilterCarbonDioxideM".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Constantan".into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] .into_iter() .collect() }), ("ItemGasFilterNitrogen".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterNitrogenL".into(), Recipe { tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Invar".into(), 1f64), ("Steel".into(), 5f64), ("Stellite".into(), 1f64)] .into_iter().collect() }), ("ItemGasFilterNitrogenM".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Constantan" .into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterNitrousOxide".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterNitrousOxideL" .into(), Recipe { tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Invar".into(), 1f64), ("Steel".into(), 5f64), ("Stellite" .into(), 1f64)] .into_iter().collect() }), ("ItemGasFilterNitrousOxideM".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Constantan".into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] .into_iter() .collect() }), ("ItemGasFilterOxygen".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterOxygenL".into(), Recipe { tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Invar".into(), 1f64), ("Steel".into(), 5f64), ("Stellite".into(), 1f64)] .into_iter().collect() }), ("ItemGasFilterOxygenM".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Constantan" .into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterPollutants".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterPollutantsL".into(), Recipe { tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Invar".into(), 1f64), ("Steel".into(), 5f64), ("Stellite".into(), 1f64)] .into_iter().collect() }), ("ItemGasFilterPollutantsM".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Constantan" .into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterVolatiles".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterVolatilesL".into(), Recipe { tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Invar".into(), 1f64), ("Steel".into(), 5f64), ("Stellite".into(), 1f64)] .into_iter().collect() }), ("ItemGasFilterVolatilesM".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Constantan" .into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterWater".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemGasFilterWaterL".into(), Recipe { tier : MachineTier::TierTwo, time : 45f64, energy : 4000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Invar".into(), 1f64), ("Steel".into(), 5f64), ("Stellite".into(), 1f64)] .into_iter().collect() }), ("ItemGasFilterWaterM".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Constantan" .into(), 1f64), ("Iron".into(), 5f64), ("Silver".into(), 5f64)] .into_iter().collect() }), ("ItemHydroponicTray".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemKitAirlock".into(), Recipe { tier : MachineTier::TierOne, time : 50f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Steel".into(), 15f64)] .into_iter() .collect() }), ("ItemKitAirlockGate".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Steel".into(), 25f64)] .into_iter().collect() }), ("ItemKitAtmospherics".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 20f64), ("Gold".into(), 5f64), ("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemKitChute" .into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 3f64)] .into_iter().collect() }), ("ItemKitCryoTube".into(), Recipe { tier : MachineTier::TierTwo, time : 120f64, energy : 24000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 10f64), ("Silver" .into(), 5f64), ("Steel".into(), 35f64)] .into_iter().collect() }), ("ItemKitDrinkingFountain".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 620f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Iron" .into(), 5f64), ("Silicon".into(), 8f64)] .into_iter().collect() }), ("ItemKitDynamicCanister".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 20f64)] .into_iter().collect() }), ("ItemKitDynamicGasTankAdvanced".into(), Recipe { tier : MachineTier::TierTwo, time : 40f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 20f64), ("Silicon".into(), 5f64), ("Steel" .into(), 15f64)] .into_iter().collect() }), ("ItemKitDynamicHydroponics".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Nickel".into(), 5f64), ("Steel".into(), 20f64)] .into_iter() .collect() }), ("ItemKitDynamicLiquidCanister".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 20f64)] .into_iter().collect() }), ("ItemKitDynamicMKIILiquidCanister" .into(), Recipe { tier : MachineTier::TierTwo, time : 40f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 20f64), ("Silicon" .into(), 5f64), ("Steel".into(), 15f64)] .into_iter().collect() }), ("ItemKitEvaporationChamber".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Silicon".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() .collect() }), ("ItemKitHeatExchanger".into(), Recipe { tier : MachineTier::TierTwo, time : 30f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Invar".into(), 10f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemKitIceCrusher" .into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemKitInsulatedLiquidPipe" .into(), Recipe { tier : MachineTier::TierOne, time : 4f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Silicon".into(), 1f64), ("Steel".into(), 1f64)] .into_iter() .collect() }), ("ItemKitInsulatedPipe".into(), Recipe { tier : MachineTier::TierOne, time : 4f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Silicon".into(), 1f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemKitInsulatedPipeUtility".into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Silicon".into(), 1f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemKitInsulatedPipeUtilityLiquid".into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Silicon".into(), 1f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemKitLargeDirectHeatExchanger".into(), Recipe { tier : MachineTier::TierTwo, time : 30f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Invar".into(), 10f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemKitLargeExtendableRadiator".into(), Recipe { tier : MachineTier::TierTwo, time : 30f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Invar".into(), 10f64), ("Steel".into(), 10f64)] .into_iter() .collect() }), ("ItemKitLiquidRegulator".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 1f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemKitLiquidTank".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemKitLiquidTankInsulated".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Silicon".into(), 30f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemKitLiquidTurboVolumePump".into(), Recipe { tier : MachineTier::TierTwo, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 4f64), ("Electrum".into(), 5f64), ("Gold".into(), 4f64), ("Steel" .into(), 5f64)] .into_iter().collect() }), ("ItemKitPassiveLargeRadiatorGas".into(), Recipe { tier : MachineTier::TierTwo, time : 30f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Invar" .into(), 5f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemKitPassiveLargeRadiatorLiquid".into(), Recipe { tier : MachineTier::TierTwo, time : 30f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Invar" .into(), 5f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemKitPassthroughHeatExchanger".into(), Recipe { tier : MachineTier::TierTwo, time : 30f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Invar".into(), 10f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemKitPipe".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 0.5f64)] .into_iter().collect() }), ("ItemKitPipeLiquid".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 0.5f64)] .into_iter().collect() }), ("ItemKitPipeOrgan".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemKitPipeRadiator".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Gold".into(), 3f64), ("Steel".into(), 2f64)] .into_iter().collect() }), ("ItemKitPipeRadiatorLiquid".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Gold".into(), 3f64), ("Steel" .into(), 2f64)] .into_iter().collect() }), ("ItemKitPipeUtility" .into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 5f64)] .into_iter().collect() }), ("ItemKitPipeUtilityLiquid".into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemKitPlanter".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemKitPortablesConnector".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemKitPoweredVent".into(), Recipe { tier : MachineTier::TierTwo, time : 20f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), 5f64), ("Invar".into(), 2f64), ("Steel".into(), 5f64)] .into_iter() .collect() }), ("ItemKitRegulator".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 1f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemKitSensor".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemKitShower" .into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 5f64), ("Silicon" .into(), 5f64)] .into_iter().collect() }), ("ItemKitSleeper".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 10f64), ("Steel".into(), 25f64)] .into_iter() .collect() }), ("ItemKitSmallDirectHeatExchanger".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Steel".into(), 3f64)] .into_iter().collect() }), ("ItemKitStandardChute".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Constantan".into(), 2f64), ("Electrum".into(), 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemKitSuitStorage".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 15f64), ("Silver".into(), 5f64)] .into_iter().collect() }), ("ItemKitTank" .into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Steel".into(), 20f64)] .into_iter() .collect() }), ("ItemKitTankInsulated".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Silicon".into(), 30f64), ("Steel".into(), 20f64)] .into_iter() .collect() }), ("ItemKitTurboVolumePump".into(), Recipe { tier : MachineTier::TierTwo, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 4f64), ("Electrum".into(), 5f64), ("Gold".into(), 4f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemKitWaterBottleFiller".into(), Recipe { tier : MachineTier::TierOne, time : 7f64, energy : 620f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Iron".into(), 5f64), ("Silicon".into(), 8f64)] .into_iter() .collect() }), ("ItemKitWaterPurifier".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 20f64), ("Gold" .into(), 5f64), ("Iron".into(), 10f64)] .into_iter().collect() }), ("ItemLiquidCanisterEmpty".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemLiquidCanisterSmart".into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Silicon".into(), 2f64), ("Steel".into(), 15f64)] .into_iter().collect() }), ("ItemLiquidDrain".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" .into(), 5f64)] .into_iter().collect() }), ("ItemLiquidPipeAnalyzer" .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), 2f64), ("Gold".into(), 2f64), ("Iron" .into(), 2f64)] .into_iter().collect() }), ("ItemLiquidPipeHeater" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 3f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemLiquidPipeValve".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemLiquidPipeVolumePump".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold" .into(), 2f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemPassiveVent".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemPassiveVentInsulated".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Silicon".into(), 5f64), ("Steel".into(), 1f64)] .into_iter().collect() }), ("ItemPipeAnalyizer".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), 2f64), ("Gold".into(), 2f64), ("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemPipeCowl" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 3f64)] .into_iter().collect() }), ("ItemPipeDigitalValve" .into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Invar".into(), 3f64), ("Steel" .into(), 5f64)] .into_iter().collect() }), ("ItemPipeGasMixer" .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64), ("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemPipeHeater".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 3f64), ("Iron".into(), 5f64)] .into_iter() .collect() }), ("ItemPipeIgniter".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 2f64), ("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemPipeLabel" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 1f64)] .into_iter().collect() }), ("ItemPipeMeter".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemPipeValve".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemPipeVolumePump".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Iron".into(), 5f64)] .into_iter() .collect() }), ("ItemWallCooler".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold" .into(), 1f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemWallHeater".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 1f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemWaterBottle" .into(), Recipe { tier : MachineTier::TierOne, time : 4f64, energy : 120f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron" .into(), 2f64), ("Silicon".into(), 4f64)] .into_iter().collect() }), ("ItemWaterPipeDigitalValve".into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Invar" .into(), 3f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemWaterPipeMeter".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemWaterWallCooler".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 1f64), ("Iron".into(), 3f64)] .into_iter() .collect() }) ] .into_iter() .collect(), }), memory: MemoryInfo { instructions: Some( vec![ ("DeviceSetLock".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : InstructionPartType::Bool8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(48u32) }] .into_iter().collect() }), ("EjectAllReagents".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }), ("EjectReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }), ("ExecuteRecipe".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("JumpIfNextInvalid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("JumpToAddress".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("MissingRecipeReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, Some(62u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("StackPointer".into(), Instruction { description : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("WaitUntilNextValid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }) ] .into_iter() .collect(), ), memory_access: MemoryAccess::ReadWrite, memory_size: 64u32, }, } .into(), ); map.insert( 1441767298i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHydroponicsStation".into(), prefab_hash: 1441767298i32, desc: "".into(), name: "Hydroponics Station".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Efficiency, MemoryAccess::Read), (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::Mature, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Efficiency, MemoryAccess::Read), (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::Mature, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Efficiency, MemoryAccess::Read), (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::Mature, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Efficiency, MemoryAccess::Read), (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::Mature, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Efficiency, MemoryAccess::Read), (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::Mature, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Efficiency, MemoryAccess::Read), (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::Mature, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Efficiency, MemoryAccess::Read), (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::Mature, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Efficiency, MemoryAccess::Read), (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::Mature, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1464854517i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureHydroponicsTray".into(), prefab_hash: 1464854517i32, desc: "The Agrizero hydroponics tray is the ideal vessel for growing a range of plantlife. It must be supplied with water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie." .into(), name: "Hydroponics Tray".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Fertiliser".into(), typ : Class::Plant } ] .into_iter() .collect(), } .into(), ); map.insert( -1841632400i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureHydroponicsTrayData".into(), prefab_hash: -1841632400i32, desc: "The Agrizero hydroponics device is the ideal vessel for growing a range of plantlife. It must be supplied with Water using a pipe network, and sufficient light to generate photosynthesis. \nIt can be automated using the Harvie. Note that unlike the Hydroponics Tray, these cannot be placed consecutively as they are considered devices rather than pure pipes. They do, however, allow data interrogation for logic systems." .into(), name: "Hydroponics Device".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Efficiency, MemoryAccess::Read), (LogicSlotType::Health, MemoryAccess::Read), (LogicSlotType::Growth, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::Mature, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Seeding, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Fertiliser".into(), typ : Class::Plant } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 443849486i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureIceCrusher".into(), prefab_hash: 443849486i32, desc: "The Recurso KoolAuger converts various ices into their respective gases and liquids.\nA remarkably smart and compact sublimation-melting unit, it produces gas or liquid depending on the ice being processed. The upper outlet is gas, the lower for liquid, and while you can attach any pipe you like to either outlet, it will only function if the correct network is attached. It will also only pass gas or liquid into a network if it is powered and turned on.\nIf the KoolAuger is full, it will not accept any further ice until the gas or liquid contents is drained. In this state, it will flash a yellow error state on the activation switch." .into(), name: "Ice Crusher".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Import".into(), typ : Class::Ore }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1005491513i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureIgniter".into(), prefab_hash: 1005491513i32, desc: "It gets the party started. Especially if that party is an explosive gas mixture." .into(), name: "Igniter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1693382705i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankGas1x1".into(), prefab_hash: -1693382705i32, desc: "A small expansion tank that increases the volume of a pipe network." .into(), name: "In-Line Tank Small Gas".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 35149429i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankGas1x2".into(), prefab_hash: 35149429i32, desc: "A small expansion tank that increases the volume of a pipe network." .into(), name: "In-Line Tank Gas".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 543645499i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankLiquid1x1".into(), prefab_hash: 543645499i32, desc: "A small expansion tank that increases the volume of a pipe network." .into(), name: "In-Line Tank Small Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( -1183969663i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInLineTankLiquid1x2".into(), prefab_hash: -1183969663i32, desc: "A small expansion tank that increases the volume of a pipe network." .into(), name: "In-Line Tank Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1818267386i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankGas1x1".into(), prefab_hash: 1818267386i32, desc: "".into(), name: "Insulated In-Line Tank Small Gas".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -177610944i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankGas1x2".into(), prefab_hash: -177610944i32, desc: "".into(), name: "Insulated In-Line Tank Gas".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -813426145i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankLiquid1x1".into(), prefab_hash: -813426145i32, desc: "".into(), name: "Insulated In-Line Tank Small Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1452100517i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedInLineTankLiquid1x2".into(), prefab_hash: 1452100517i32, desc: "".into(), name: "Insulated In-Line Tank Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -1967711059i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCorner".into(), prefab_hash: -1967711059i32, desc: "Insulated pipes greatly reduce heat loss from gases stored in them." .into(), name: "Insulated Pipe (Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -92778058i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction".into(), prefab_hash: -92778058i32, desc: "Insulated pipes greatly reduce heat loss from gases stored in them." .into(), name: "Insulated Pipe (Cross Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1328210035i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction3".into(), prefab_hash: 1328210035i32, desc: "Insulated pipes greatly reduce heat loss from gases stored in them." .into(), name: "Insulated Pipe (3-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -783387184i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction4".into(), prefab_hash: -783387184i32, desc: "Insulated pipes greatly reduce heat loss from gases stored in them." .into(), name: "Insulated Pipe (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -1505147578i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction5".into(), prefab_hash: -1505147578i32, desc: "Insulated pipes greatly reduce heat loss from gases stored in them." .into(), name: "Insulated Pipe (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1061164284i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeCrossJunction6".into(), prefab_hash: 1061164284i32, desc: "Insulated pipes greatly reduce heat loss from gases stored in them." .into(), name: "Insulated Pipe (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1713710802i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCorner".into(), prefab_hash: 1713710802i32, desc: "Liquid piping with very low temperature loss or gain.".into(), name: "Insulated Liquid Pipe (Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1926651727i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction".into(), prefab_hash: 1926651727i32, desc: "Liquid piping with very low temperature loss or gain.".into(), name: "Insulated Liquid Pipe (3-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( 363303270i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction4".into(), prefab_hash: 363303270i32, desc: "Liquid piping with very low temperature loss or gain.".into(), name: "Insulated Liquid Pipe (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1654694384i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction5".into(), prefab_hash: 1654694384i32, desc: "Liquid piping with very low temperature loss or gain.".into(), name: "Insulated Liquid Pipe (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -72748982i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidCrossJunction6".into(), prefab_hash: -72748982i32, desc: "Liquid piping with very low temperature loss or gain.".into(), name: "Insulated Liquid Pipe (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( 295678685i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidStraight".into(), prefab_hash: 295678685i32, desc: "Liquid piping with very low temperature loss or gain.".into(), name: "Insulated Liquid Pipe (Straight)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -532384855i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeLiquidTJunction".into(), prefab_hash: -532384855i32, desc: "Liquid piping with very low temperature loss or gain.".into(), name: "Insulated Liquid Pipe (T Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( 2134172356i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeStraight".into(), prefab_hash: 2134172356i32, desc: "Insulated pipes greatly reduce heat loss from gases stored in them." .into(), name: "Insulated Pipe (Straight)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -2076086215i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedPipeTJunction".into(), prefab_hash: -2076086215i32, desc: "Insulated pipes greatly reduce heat loss from gases stored in them." .into(), name: "Insulated Pipe (T Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -31273349i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedTankConnector".into(), prefab_hash: -31273349i32, desc: "".into(), name: "Insulated Tank Connector".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -1602030414i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureInsulatedTankConnectorLiquid".into(), prefab_hash: -1602030414i32, desc: "".into(), name: "Insulated Tank Connector Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Portable Slot".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -2096421875i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorGlass".into(), prefab_hash: -2096421875i32, desc: "0.Operate\n1.Logic".into(), name: "Interior Door Glass".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 847461335i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorPadded".into(), prefab_hash: 847461335i32, desc: "0.Operate\n1.Logic".into(), name: "Interior Door Padded".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1981698201i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorPaddedThin".into(), prefab_hash: 1981698201i32, desc: "0.Operate\n1.Logic".into(), name: "Interior Door Padded Thin".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1182923101i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureInteriorDoorTriangle".into(), prefab_hash: -1182923101i32, desc: "0.Operate\n1.Logic".into(), name: "Interior Door Triangle".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -828056979i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureKlaxon".into(), prefab_hash: -828056979i32, desc: "Klaxons allow you to play over 50 announcements and sounds, depending on your Logic set-up. Set the mode to select the output." .into(), name: "Klaxon Speaker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::SoundAlert, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "None".into()), (1u32, "Alarm2".into()), (2u32, "Alarm3" .into()), (3u32, "Alarm4".into()), (4u32, "Alarm5".into()), (5u32, "Alarm6".into()), (6u32, "Alarm7".into()), (7u32, "Music1" .into()), (8u32, "Music2".into()), (9u32, "Music3".into()), (10u32, "Alarm8".into()), (11u32, "Alarm9".into()), (12u32, "Alarm10".into()), (13u32, "Alarm11".into()), (14u32, "Alarm12" .into()), (15u32, "Danger".into()), (16u32, "Warning".into()), (17u32, "Alert".into()), (18u32, "StormIncoming".into()), (19u32, "IntruderAlert".into()), (20u32, "Depressurising".into()), (21u32, "Pressurising".into()), (22u32, "AirlockCycling".into()), (23u32, "PowerLow".into()), (24u32, "SystemFailure".into()), (25u32, "Welcome".into()), (26u32, "MalfunctionDetected".into()), (27u32, "HaltWhoGoesThere".into()), (28u32, "FireFireFire" .into()), (29u32, "One".into()), (30u32, "Two".into()), (31u32, "Three".into()), (32u32, "Four".into()), (33u32, "Five".into()), (34u32, "Floor".into()), (35u32, "RocketLaunching".into()), (36u32, "LiftOff".into()), (37u32, "TraderIncoming".into()), (38u32, "TraderLanded".into()), (39u32, "PressureHigh".into()), (40u32, "PressureLow".into()), (41u32, "TemperatureHigh".into()), (42u32, "TemperatureLow".into()), (43u32, "PollutantsDetected" .into()), (44u32, "HighCarbonDioxide".into()), (45u32, "Alarm1" .into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -415420281i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureLadder".into(), prefab_hash: -415420281i32, desc: "".into(), name: "Ladder".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1541734993i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureLadderEnd".into(), prefab_hash: 1541734993i32, desc: "".into(), name: "Ladder End".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1230658883i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeDirectHeatExchangeGastoGas".into(), prefab_hash: -1230658883i32, desc: "Direct Heat Exchangers equalize the temperature of the two input networks." .into(), name: "Large Direct Heat Exchanger - Gas + Gas".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1412338038i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeDirectHeatExchangeGastoLiquid".into(), prefab_hash: 1412338038i32, desc: "Direct Heat Exchangers equalize the temperature of the two input networks." .into(), name: "Large Direct Heat Exchanger - Gas + Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 792686502i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeDirectHeatExchangeLiquidtoLiquid".into(), prefab_hash: 792686502i32, desc: "Direct Heat Exchangers equalize the temperature of the two input networks." .into(), name: "Large Direct Heat Exchange - Liquid + Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -566775170i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeExtendableRadiator".into(), prefab_hash: -566775170i32, desc: "Omptimised for radiating heat in vacuum and low pressure environments. If pointed at the sun it will heat its contents rapidly via solar heating. The panels can fold away to stop all heat radiation/solar heating and protect them from storms." .into(), name: "Large Extendable Radiator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.02f32, radiation_factor: 2f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1351081801i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeHangerDoor".into(), prefab_hash: -1351081801i32, desc: "1 x 3 modular door piece for building hangar doors.".into(), name: "Large Hangar Door".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1913391845i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLargeSatelliteDish".into(), prefab_hash: 1913391845i32, desc: "This large communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic." .into(), name: "Large Satellite Dish".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::SignalStrength, MemoryAccess::Read), (LogicType::SignalId, MemoryAccess::Read), (LogicType::InterrogationProgress, MemoryAccess::Read), (LogicType::TargetPadIndex, MemoryAccess::ReadWrite), (LogicType::SizeX, MemoryAccess::Read), (LogicType::SizeZ, MemoryAccess::Read), (LogicType::MinimumWattsToContact, MemoryAccess::Read), (LogicType::WattsReachingContact, MemoryAccess::Read), (LogicType::ContactTypeId, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::BestContactFilter, MemoryAccess::ReadWrite), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -558953231i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureLaunchMount".into(), prefab_hash: -558953231i32, desc: "The first piece to place whern building a rocket. Rockets can be constructed and/or landed here. Each Launch Mount will be allocated a slot on the Space Map and assigned a Location Code." .into(), name: "Launch Mount".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 797794350i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightLong".into(), prefab_hash: 797794350i32, desc: "".into(), name: "Wall Light (Long)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1847265835i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightLongAngled".into(), prefab_hash: 1847265835i32, desc: "".into(), name: "Wall Light (Long Angled)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 555215790i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightLongWide".into(), prefab_hash: 555215790i32, desc: "".into(), name: "Wall Light (Long Wide)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1514476632i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightRound".into(), prefab_hash: 1514476632i32, desc: "Description coming.".into(), name: "Light Round".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1592905386i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightRoundAngled".into(), prefab_hash: 1592905386i32, desc: "Description coming.".into(), name: "Light Round (Angled)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1436121888i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLightRoundSmall".into(), prefab_hash: 1436121888i32, desc: "Description coming.".into(), name: "Light Round (Small)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1687692899i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidDrain".into(), prefab_hash: 1687692899i32, desc: "When connected to power and activated, it pumps liquid from a liquid network into the world." .into(), name: "Active Liquid Outlet".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -2113838091i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeAnalyzer".into(), prefab_hash: -2113838091i32, desc: "".into(), name: "Liquid Pipe Analyzer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -287495560i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeHeater".into(), prefab_hash: -287495560i32, desc: "Adds 1000 joules of heat per tick to the contents of your pipe network." .into(), name: "Pipe Heater (Liquid)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -782453061i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeOneWayValve".into(), prefab_hash: -782453061i32, desc: "The one way valve moves liquid in one direction only: from input side to output side. It only permits flow if the input pressure is higher than output pressure.." .into(), name: "One Way Valve (Liquid)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 2072805863i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPipeRadiator".into(), prefab_hash: 2072805863i32, desc: "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added to the liquid within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the liquid in question. Adding multiple radiators will speed up heat transfer." .into(), name: "Liquid Pipe Convection Radiator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 1f32, radiation_factor: 0.75f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 482248766i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidPressureRegulator".into(), prefab_hash: 482248766i32, desc: "Regulates the volume ratio of liquid in the output Liquid pipe. This is expressed as percentage where 100 is totally full and 0 is empty." .into(), name: "Liquid Volume Regulator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1098900430i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankBig".into(), prefab_hash: 1098900430i32, desc: "".into(), name: "Liquid Tank Big".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1430440215i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankBigInsulated".into(), prefab_hash: -1430440215i32, desc: "".into(), name: "Insulated Liquid Tank Big".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1988118157i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankSmall".into(), prefab_hash: 1988118157i32, desc: "".into(), name: "Liquid Tank Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 608607718i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankSmallInsulated".into(), prefab_hash: 608607718i32, desc: "".into(), name: "Insulated Liquid Tank Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1691898022i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTankStorage".into(), prefab_hash: 1691898022i32, desc: "When connected to a liquid pipe network, the tank storage unit allows you to refill a Liquid Canister, as well as read various atmospheric data from the Gas Canister. It will not accept gas canisters." .into(), name: "Liquid Tank Storage".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Liquid Canister".into(), typ : Class::LiquidCanister } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1051805505i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidTurboVolumePump".into(), prefab_hash: -1051805505i32, desc: "Shifts 10 times more liquid than a basic Volume Pump, with a mode that can be set to flow in either direction." .into(), name: "Turbo Volume Pump (Liquid)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Right".into()), (1u32, "Left".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1734723642i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidUmbilicalFemale".into(), prefab_hash: 1734723642i32, desc: "".into(), name: "Umbilical Socket (Liquid)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1220870319i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidUmbilicalFemaleSide".into(), prefab_hash: 1220870319i32, desc: "".into(), name: "Umbilical Socket Angle (Liquid)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1798420047i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidUmbilicalMale".into(), prefab_hash: -1798420047i32, desc: "0.Left\n1.Center\n2.Right".into(), name: "Umbilical (Liquid)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "Right" .into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1849974453i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidValve".into(), prefab_hash: 1849974453i32, desc: "".into(), name: "Liquid Valve".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -454028979i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLiquidVolumePump".into(), prefab_hash: -454028979i32, desc: "".into(), name: "Liquid Volume Pump".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -647164662i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLockerSmall".into(), prefab_hash: -647164662i32, desc: "".into(), name: "Locker (Small)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 264413729i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicBatchReader".into(), prefab_hash: 264413729i32, desc: "".into(), name: "Batch Reader".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 436888930i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicBatchSlotReader".into(), prefab_hash: 436888930i32, desc: "".into(), name: "Batch Slot Reader".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1415443359i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicBatchWriter".into(), prefab_hash: 1415443359i32, desc: "".into(), name: "Batch Writer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ForceWrite, MemoryAccess::Write), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 491845673i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicButton".into(), prefab_hash: 491845673i32, desc: "".into(), name: "Button".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1489728908i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicCompare".into(), prefab_hash: -1489728908i32, desc: "0.Equals\n1.Greater\n2.Less\n3.NotEquals".into(), name: "Logic Compare".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Equals".into()), (1u32, "Greater".into()), (2u32, "Less" .into()), (3u32, "NotEquals".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 554524804i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicDial".into(), prefab_hash: 554524804i32, desc: "An assignable dial with up to 1000 modes.".into(), name: "Dial".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1942143074i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicGate".into(), prefab_hash: 1942143074i32, desc: "A logic device that performs a logical operation on one or more binary inputs that produces a single binary output. An input greater than zero is considered true for operations." .into(), name: "Logic Gate".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "AND".into()), (1u32, "OR".into()), (2u32, "XOR".into()), (3u32, "NAND".into()), (4u32, "NOR".into()), (5u32, "XNOR" .into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 2077593121i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicHashGen".into(), prefab_hash: 2077593121i32, desc: "".into(), name: "Logic Hash Generator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1657691323i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMath".into(), prefab_hash: 1657691323i32, desc: "0.Add\n1.Subtract\n2.Multiply\n3.Divide\n4.Mod\n5.Atan2\n6.Pow\n7.Log" .into(), name: "Logic Math".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Add".into()), (1u32, "Subtract".into()), (2u32, "Multiply".into()), (3u32, "Divide".into()), (4u32, "Mod" .into()), (5u32, "Atan2".into()), (6u32, "Pow".into()), (7u32, "Log".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1160020195i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMathUnary".into(), prefab_hash: -1160020195i32, desc: "0.Ceil\n1.Floor\n2.Abs\n3.Log\n4.Exp\n5.Round\n6.Rand\n7.Sqrt\n8.Sin\n9.Cos\n10.Tan\n11.Asin\n12.Acos\n13.Atan\n14.Not" .into(), name: "Math Unary".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Ceil".into()), (1u32, "Floor".into()), (2u32, "Abs" .into()), (3u32, "Log".into()), (4u32, "Exp".into()), (5u32, "Round".into()), (6u32, "Rand".into()), (7u32, "Sqrt".into()), (8u32, "Sin".into()), (9u32, "Cos".into()), (10u32, "Tan" .into()), (11u32, "Asin".into()), (12u32, "Acos".into()), (13u32, "Atan".into()), (14u32, "Not".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -851746783i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMemory".into(), prefab_hash: -851746783i32, desc: "".into(), name: "Logic Memory".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 929022276i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMinMax".into(), prefab_hash: 929022276i32, desc: "0.Greater\n1.Less".into(), name: "Logic Min/Max".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Greater".into()), (1u32, "Less".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 2096189278i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicMirror".into(), prefab_hash: 2096189278i32, desc: "".into(), name: "Logic Mirror".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![].into_iter().collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -345383640i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicReader".into(), prefab_hash: -345383640i32, desc: "".into(), name: "Logic Reader".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -124308857i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicReagentReader".into(), prefab_hash: -124308857i32, desc: "".into(), name: "Reagent Reader".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 876108549i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicRocketDownlink".into(), prefab_hash: 876108549i32, desc: "".into(), name: "Logic Rocket Downlink".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 546002924i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicRocketUplink".into(), prefab_hash: 546002924i32, desc: "".into(), name: "Logic Uplink".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1822736084i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSelect".into(), prefab_hash: 1822736084i32, desc: "0.Equals\n1.Greater\n2.Less\n3.NotEquals".into(), name: "Logic Select".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Equals".into()), (1u32, "Greater".into()), (2u32, "Less" .into()), (3u32, "NotEquals".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -767867194i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSlotReader".into(), prefab_hash: -767867194i32, desc: "".into(), name: "Slot Reader".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 873418029i32, StructureLogicDeviceMemoryTemplate { templateType: "StructureLogicDeviceMemory".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSorter".into(), prefab_hash: 873418029i32, desc: "Contains an Internal Memory which is assessed to check whether something should be sorted. When an item is in the Import Slot, the stack is checked and if result is true the thing is moved to the Export 2 slot, otherwise it is moved to the Export slot. The Mode is used in how the stack is assessed, by default the mode is ALL, so every instruction in the stack would need to return true." .into(), name: "Logic Sorter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "All".into()), (1u32, "Any".into()), (2u32, "None".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Export 2" .into(), typ : Class::None }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output2 }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, memory: MemoryInfo { instructions: Some( vec![ ("FilterPrefabHashEquals".into(), Instruction { description : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "SorterInstruction".into(), value : 1i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }), ("FilterPrefabHashNotEquals".into(), Instruction { description : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | PREFAB_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "SorterInstruction".into(), value : 2i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }), ("FilterQuantityCompare".into(), Instruction { description : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | QUANTITY | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" .into(), description_stripped : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | QUANTITY | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" .into(), typ : "SorterInstruction".into(), value : 5i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "CONDITION_OPERATION".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 31u32)) }, name : "QUANTITY".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((32u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(32u32) }] .into_iter().collect() }), ("FilterSlotTypeCompare".into(), Instruction { description : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SLOT_TYPE | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" .into(), description_stripped : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SLOT_TYPE | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" .into(), typ : "SorterInstruction".into(), value : 4i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "CONDITION_OPERATION".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 31u32)) }, name : "SLOT_TYPE".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((32u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(32u32) }] .into_iter().collect() }), ("FilterSortingClassCompare".into(), Instruction { description : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SORTING_CLASS | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" .into(), description_stripped : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CONDITION_OPERATION | BYTE_8 |\r\n| 16-31 | SORTING_CLASS | USHORT_16 |\r\n| 32-63 | UNUSED | 32 |" .into(), typ : "SorterInstruction".into(), value : 3i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "CONDITION_OPERATION".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 31u32)) }, name : "SORTING_CLASS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((32u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(32u32) }] .into_iter().collect() }), ("LimitNextExecutionByCount".into(), Instruction { description : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | COUNT | UINT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "SorterInstruction".into(), value : 6i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "COUNT".into(), typ : InstructionPartType::UInt32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }) ] .into_iter() .collect(), ), memory_access: MemoryAccess::ReadWrite, memory_size: 32u32, }, } .into(), ); map.insert( 1220484876i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSwitch".into(), prefab_hash: 1220484876i32, desc: "".into(), name: "Lever".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 321604921i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicSwitch2".into(), prefab_hash: 321604921i32, desc: "".into(), name: "Switch".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -693235651i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicTransmitter".into(), prefab_hash: -693235651i32, desc: "Connects to Logic Transmitter" .into(), name: "Logic Transmitter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![].into_iter().collect(), modes: Some( vec![(0u32, "Passive".into()), (1u32, "Active".into())] .into_iter() .collect(), ), transmission_receiver: true, wireless_logic: true, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1326019434i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicWriter".into(), prefab_hash: -1326019434i32, desc: "".into(), name: "Logic Writer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ForceWrite, MemoryAccess::Write), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1321250424i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureLogicWriterSwitch".into(), prefab_hash: -1321250424i32, desc: "".into(), name: "Logic Writer Switch".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ForceWrite, MemoryAccess::Write), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1808154199i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureManualHatch".into(), prefab_hash: -1808154199i32, desc: "Can be welded using a Welding Torch or Arc Welder to lock it in the current state. Use the welder again to unlock." .into(), name: "Manual Hatch".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1918215845i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumConvectionRadiator".into(), prefab_hash: -1918215845i32, desc: "A stand-alone radiator unit optimized for exchanging heat with its surrounding atmosphere." .into(), name: "Medium Convection Radiator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 1.25f32, radiation_factor: 0.4f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1169014183i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumConvectionRadiatorLiquid".into(), prefab_hash: -1169014183i32, desc: "A stand-alone liquid radiator unit optimized for exchanging heat with its surrounding atmosphere." .into(), name: "Medium Convection Radiator Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 1.25f32, radiation_factor: 0.4f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -566348148i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumHangerDoor".into(), prefab_hash: -566348148i32, desc: "1 x 2 modular door piece for building hangar doors.".into(), name: "Medium Hangar Door".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -975966237i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRadiator".into(), prefab_hash: -975966237i32, desc: "A stand-alone radiator unit optimized for radiating heat in vacuums." .into(), name: "Medium Radiator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.2f32, radiation_factor: 4f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1141760613i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRadiatorLiquid".into(), prefab_hash: -1141760613i32, desc: "A stand-alone liquid radiator unit optimized for radiating heat in vacuums." .into(), name: "Medium Radiator Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.2f32, radiation_factor: 4f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1093860567i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRocketGasFuelTank".into(), prefab_hash: -1093860567i32, desc: "".into(), name: "Gas Capsule Tank Medium".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1143639539i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMediumRocketLiquidFuelTank".into(), prefab_hash: 1143639539i32, desc: "".into(), name: "Liquid Capsule Tank Medium".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1713470563i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureMotionSensor".into(), prefab_hash: -1713470563i32, desc: "Originally developed to monitor dance marathons, the motion sensor can also be connected to Logic systems for security purposes, automatic lighting, doors and various other applications.\nThe sensor activates whenever a player enters the grid it is placed on." .into(), name: "Motion Sensor".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1898243702i32, StructureCircuitHolderTemplate { templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureNitrolyzer".into(), prefab_hash: 1898243702i32, desc: "This device is used to create Nitrous Oxide from Oxygen, Nitrogen, and a large amount of energy. The process does not completely transform all the available gas at once, so the output is a mix of all three gasses, which may need further processing. More NOS will be created, if the gas inside the machine is close to a 1/1 ratio of Oxygen to Nitrogen. The second gas input line in optional, and not required if the gas is pre mixed." .into(), name: "Nitrolyzer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::PressureInput, MemoryAccess::Read), (LogicType::TemperatureInput, MemoryAccess::Read), (LogicType::RatioOxygenInput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioNitrogenInput, MemoryAccess::Read), (LogicType::RatioPollutantInput, MemoryAccess::Read), (LogicType::RatioVolatilesInput, MemoryAccess::Read), (LogicType::RatioWaterInput, MemoryAccess::Read), (LogicType::RatioNitrousOxideInput, MemoryAccess::Read), (LogicType::TotalMolesInput, MemoryAccess::Read), (LogicType::PressureInput2, MemoryAccess::Read), (LogicType::TemperatureInput2, MemoryAccess::Read), (LogicType::RatioOxygenInput2, MemoryAccess::Read), (LogicType::RatioCarbonDioxideInput2, MemoryAccess::Read), (LogicType::RatioNitrogenInput2, MemoryAccess::Read), (LogicType::RatioPollutantInput2, MemoryAccess::Read), (LogicType::RatioVolatilesInput2, MemoryAccess::Read), (LogicType::RatioWaterInput2, MemoryAccess::Read), (LogicType::RatioNitrousOxideInput2, MemoryAccess::Read), (LogicType::TotalMolesInput2, MemoryAccess::Read), (LogicType::PressureOutput, MemoryAccess::Read), (LogicType::TemperatureOutput, MemoryAccess::Read), (LogicType::RatioOxygenOutput, MemoryAccess::Read), (LogicType::RatioCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioNitrogenOutput, MemoryAccess::Read), (LogicType::RatioPollutantOutput, MemoryAccess::Read), (LogicType::RatioVolatilesOutput, MemoryAccess::Read), (LogicType::RatioWaterOutput, MemoryAccess::Read), (LogicType::RatioNitrousOxideOutput, MemoryAccess::Read), (LogicType::TotalMolesOutput, MemoryAccess::Read), (LogicType::CombustionInput, MemoryAccess::Read), (LogicType::CombustionInput2, MemoryAccess::Read), (LogicType::CombustionOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenInput2, MemoryAccess::Read), (LogicType::RatioLiquidNitrogenOutput, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidOxygenInput, MemoryAccess::Read), (LogicType::RatioLiquidOxygenInput2, MemoryAccess::Read), (LogicType::RatioLiquidOxygenOutput, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesInput, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesInput2, MemoryAccess::Read), (LogicType::RatioLiquidVolatilesOutput, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioSteamInput, MemoryAccess::Read), (LogicType::RatioSteamInput2, MemoryAccess::Read), (LogicType::RatioSteamOutput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideInput, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideInput2, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxideOutput, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidPollutantInput, MemoryAccess::Read), (LogicType::RatioLiquidPollutantInput2, MemoryAccess::Read), (LogicType::RatioLiquidPollutantOutput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideInput, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideInput2, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxideOutput, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Idle".into()), (1u32, "Active".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: Some(2u32), has_activate_state: true, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 322782515i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureOccupancySensor".into(), prefab_hash: 322782515i32, desc: "Will be triggered if there is a player in the same room as the sensor. The quantity variable will show the number of players. You can use configure it to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet. This sensor only works when placed in a room." .into(), name: "Occupancy Sensor".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Activate, MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1794932560i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureOverheadShortCornerLocker".into(), prefab_hash: -1794932560i32, desc: "".into(), name: "Overhead Corner Locker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1468249454i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureOverheadShortLocker".into(), prefab_hash: 1468249454i32, desc: "".into(), name: "Overhead Locker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 2066977095i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveLargeRadiatorGas".into(), prefab_hash: 2066977095i32, desc: "Has been replaced by Medium Convection Radiator." .into(), name: "Medium Convection Radiator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 1f32, radiation_factor: 0.4f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 24786172i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveLargeRadiatorLiquid".into(), prefab_hash: 24786172i32, desc: "Has been replaced by Medium Convection Radiator Liquid." .into(), name: "Medium Convection Radiator Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 1f32, radiation_factor: 0.4f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1812364811i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveLiquidDrain".into(), prefab_hash: 1812364811i32, desc: "Moves liquids from a pipe network to the world atmosphere." .into(), name: "Passive Liquid Drain".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 335498166i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveVent".into(), prefab_hash: 335498166i32, desc: "Passive vents allow gases to move into and out of pipe networks, which are closed systems unless connected to a device or structure. Passive vents are not powered, merely an aperture, essentially turning an enclosed space into part of the pipe network. " .into(), name: "Passive Vent".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1363077139i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePassiveVentInsulated".into(), prefab_hash: 1363077139i32, desc: "".into(), name: "Insulated Passive Vent".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -1674187440i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassthroughHeatExchangerGasToGas".into(), prefab_hash: -1674187440i32, desc: "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures." .into(), name: "CounterFlow Heat Exchanger - Gas + Gas".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1928991265i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassthroughHeatExchangerGasToLiquid".into(), prefab_hash: 1928991265i32, desc: "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exhange of temperatures." .into(), name: "CounterFlow Heat Exchanger - Gas + Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input2 }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1472829583i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePassthroughHeatExchangerLiquidToLiquid".into(), prefab_hash: -1472829583i32, desc: "Exchange heat from one pipe network to another. By drawing down the pressure of the outputs with a pump or regulator and regulating input pressures, the temperatures of two counterflowing networks can be effectively exchanged.\n Balancing the throughput of both inputs is key to creating a good exchange of temperatures." .into(), name: "CounterFlow Heat Exchanger - Liquid + Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input2 }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1434523206i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickLandscapeLarge".into(), prefab_hash: -1434523206i32, desc: "".into(), name: "Picture Frame Thick Landscape Large".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2041566697i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickLandscapeSmall".into(), prefab_hash: -2041566697i32, desc: "".into(), name: "Picture Frame Thick Landscape Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 950004659i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountLandscapeLarge".into(), prefab_hash: 950004659i32, desc: "".into(), name: "Picture Frame Thick Landscape Large".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 347154462i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountLandscapeSmall".into(), prefab_hash: 347154462i32, desc: "".into(), name: "Picture Frame Thick Landscape Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1459641358i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountPortraitLarge".into(), prefab_hash: -1459641358i32, desc: "".into(), name: "Picture Frame Thick Mount Portrait Large".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2066653089i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickMountPortraitSmall".into(), prefab_hash: -2066653089i32, desc: "".into(), name: "Picture Frame Thick Mount Portrait Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1686949570i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickPortraitLarge".into(), prefab_hash: -1686949570i32, desc: "".into(), name: "Picture Frame Thick Portrait Large".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1218579821i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThickPortraitSmall".into(), prefab_hash: -1218579821i32, desc: "".into(), name: "Picture Frame Thick Portrait Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1418288625i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinLandscapeLarge".into(), prefab_hash: -1418288625i32, desc: "".into(), name: "Picture Frame Thin Landscape Large".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2024250974i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinLandscapeSmall".into(), prefab_hash: -2024250974i32, desc: "".into(), name: "Picture Frame Thin Landscape Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1146760430i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountLandscapeLarge".into(), prefab_hash: -1146760430i32, desc: "".into(), name: "Picture Frame Thin Landscape Large".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1752493889i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountLandscapeSmall".into(), prefab_hash: -1752493889i32, desc: "".into(), name: "Picture Frame Thin Landscape Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1094895077i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountPortraitLarge".into(), prefab_hash: 1094895077i32, desc: "".into(), name: "Picture Frame Thin Portrait Large".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1835796040i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinMountPortraitSmall".into(), prefab_hash: 1835796040i32, desc: "".into(), name: "Picture Frame Thin Portrait Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1212777087i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinPortraitLarge".into(), prefab_hash: 1212777087i32, desc: "".into(), name: "Picture Frame Thin Portrait Large".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1684488658i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePictureFrameThinPortraitSmall".into(), prefab_hash: 1684488658i32, desc: "".into(), name: "Picture Frame Thin Portrait Small".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 435685051i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeAnalysizer".into(), prefab_hash: 435685051i32, desc: "Allegedly the outcome of a weekend father-daughter electronics project by an overzealous {ExMin engineer, the pipe analyzer is essentially a more advanced version of the Pipe Meter.\nDisplaying the internal pressure of pipe networks, it also reads out temperature and gas contents, and can be connected to a Console or Computer via a {Logic system." .into(), name: "Pipe Analyzer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1785673561i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCorner".into(), prefab_hash: -1785673561i32, desc: "You can upgrade this pipe to an Insulated Pipe (Corner) using an Kit (Insulated Pipe) and a Wrench." .into(), name: "Pipe (Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 465816159i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCowl".into(), prefab_hash: 465816159i32, desc: "".into(), name: "Pipe Cowl".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( -1405295588i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction".into(), prefab_hash: -1405295588i32, desc: "You can upgrade this pipe to an Insulated Pipe (Cross Junction) using an Kit (Insulated Pipe) and a Wrench." .into(), name: "Pipe (Cross Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 2038427184i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction3".into(), prefab_hash: 2038427184i32, desc: "You can upgrade this pipe to an Insulated Pipe (3-Way Junction) using an Kit (Insulated Pipe) and a Wrench." .into(), name: "Pipe (3-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( -417629293i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction4".into(), prefab_hash: -417629293i32, desc: "You can upgrade this pipe to an Insulated Pipe (4-Way Junction) using an Kit (Insulated Pipe) and a Wrench." .into(), name: "Pipe (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( -1877193979i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction5".into(), prefab_hash: -1877193979i32, desc: "You can upgrade this pipe to an Insulated Pipe (5-Way Junction) using an Kit (Insulated Pipe) and a Wrench." .into(), name: "Pipe (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 152378047i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeCrossJunction6".into(), prefab_hash: 152378047i32, desc: "You can upgrade this pipe to an Insulated Pipe (6-Way Junction) using an Kit (Insulated Pipe) and a Wrench." .into(), name: "Pipe (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( -419758574i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeHeater".into(), prefab_hash: -419758574i32, desc: "Adds 1000 joules of heat per tick to the contents of your pipe network." .into(), name: "Pipe Heater (Gas)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1286441942i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeIgniter".into(), prefab_hash: 1286441942i32, desc: "Ignites the atmosphere inside the attached pipe network.".into(), name: "Pipe Igniter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -2068497073i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeInsulatedLiquidCrossJunction".into(), prefab_hash: -2068497073i32, desc: "Liquid piping with very low temperature loss or gain.".into(), name: "Insulated Liquid Pipe (Cross Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, } .into(), ); map.insert( -999721119i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLabel".into(), prefab_hash: -999721119i32, desc: "As its perspicacious name suggests, the pipe label is designed to be attached to a straight stretch of pipe. Users can then label the label with the Labeller." .into(), name: "Pipe Label".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1856720921i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCorner".into(), prefab_hash: -1856720921i32, desc: "You can upgrade this pipe to an Insulated Liquid Pipe (Corner) using an Kit (Insulated Liquid Pipe) and a Wrench." .into(), name: "Liquid Pipe (Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1848735691i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction".into(), prefab_hash: 1848735691i32, desc: "You can upgrade this pipe to an Insulated Liquid Pipe (Cross Junction) using an Kit (Insulated Liquid Pipe) and a Wrench." .into(), name: "Liquid Pipe (Cross Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1628087508i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction3".into(), prefab_hash: 1628087508i32, desc: "You can upgrade this pipe to an using an Kit (Insulated Liquid Pipe) and a Wrench." .into(), name: "Liquid Pipe (3-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( -9555593i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction4".into(), prefab_hash: -9555593i32, desc: "You can upgrade this pipe to an Insulated Liquid Pipe (4-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench." .into(), name: "Liquid Pipe (4-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( -2006384159i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction5".into(), prefab_hash: -2006384159i32, desc: "You can upgrade this pipe to an Insulated Liquid Pipe (5-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench." .into(), name: "Liquid Pipe (5-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 291524699i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidCrossJunction6".into(), prefab_hash: 291524699i32, desc: "You can upgrade this pipe to an Insulated Liquid Pipe (6-Way Junction) using an Kit (Insulated Liquid Pipe) and a Wrench." .into(), name: "Liquid Pipe (6-Way Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 667597982i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidStraight".into(), prefab_hash: 667597982i32, desc: "You can upgrade this pipe to an Insulated Liquid Pipe (Straight) using an Kit (Insulated Liquid Pipe) and a Wrench." .into(), name: "Liquid Pipe (Straight)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 262616717i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeLiquidTJunction".into(), prefab_hash: 262616717i32, desc: "You can upgrade this pipe to an Insulated Liquid Pipe (T Junction) using an Kit (Insulated Liquid Pipe) and a Wrench." .into(), name: "Liquid Pipe (T Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( -1798362329i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeMeter".into(), prefab_hash: -1798362329i32, desc: "While the Stationeers program has, thus far, inspired little in the way of classical poetry, the following haiku was found etched, ironically, on a piece of pipe wreckage found on Vulcan:\n\"Humble pipe meter\nspeaks the truth, transmits pressure\nwithin any pipe\"" .into(), name: "Pipe Meter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1580412404i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeOneWayValve".into(), prefab_hash: 1580412404i32, desc: "The one way valve moves gas in one direction only: from input side to output side. It only permits flow if the input pressure is higher than output pressure.\n" .into(), name: "One Way Valve (Gas)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1305252611i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeOrgan".into(), prefab_hash: 1305252611i32, desc: "The pipe organ can be attached to one end of a Kit (Pipe Valve). The length of the pipe after the pipe organ changes the pitch of the note it will play when the valve is opened. Use Logic to open and close the valves to create some custom tunes for your base or an audible warning." .into(), name: "Pipe Organ".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( 1696603168i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeRadiator".into(), prefab_hash: 1696603168i32, desc: "A simple heat exchanger, pipe radiators can be placed on pipes to shed or gain heat, depending on the temperature of the surrounding atmosphere. If the atmosphere is hotter, heat will be added the gas within the pipe network, and visa versa if colder. In a vacuum, heat will be radiated. \nThe speed of heat gain or loss will depend on the gas in question. Adding multiple radiators will speed up heat transfer." .into(), name: "Pipe Convection Radiator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 1f32, radiation_factor: 0.75f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -399883995i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeRadiatorFlat".into(), prefab_hash: -399883995i32, desc: "A pipe mounted radiator optimized for radiating heat in vacuums." .into(), name: "Pipe Radiator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.2f32, radiation_factor: 3f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 2024754523i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePipeRadiatorFlatLiquid".into(), prefab_hash: 2024754523i32, desc: "A liquid pipe mounted radiator optimized for radiating heat in vacuums." .into(), name: "Pipe Radiator Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.2f32, radiation_factor: 3f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 73728932i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeStraight".into(), prefab_hash: 73728932i32, desc: "You can upgrade this pipe to an Insulated Pipe (Straight) using an Kit (Insulated Pipe) and a Wrench." .into(), name: "Pipe (Straight)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( -913817472i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePipeTJunction".into(), prefab_hash: -913817472i32, desc: "You can upgrade this pipe to an Insulated Pipe (T Junction) using an Kit (Insulated Pipe) and a Wrench." .into(), name: "Pipe (T Junction)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, } .into(), ); map.insert( -1125641329i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructurePlanter".into(), prefab_hash: -1125641329i32, desc: "A small planter for decorative or hydroponic purposes. Can be connected to Water, or watered manually using a Water Bottle or Liquid Canister (Water)." .into(), name: "Planter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, slots: vec![ SlotInfo { name : "Plant".into(), typ : Class::Plant }, SlotInfo { name : "Plant".into(), typ : Class::Plant } ] .into_iter() .collect(), } .into(), ); map.insert( 1559586682i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructurePlatformLadderOpen".into(), prefab_hash: 1559586682i32, desc: "".into(), name: "Ladder Platform".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 989835703i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructurePlinth".into(), prefab_hash: 989835703i32, desc: "".into(), name: "Plinth".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![SlotInfo { name : "".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( -899013427i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePortablesConnector".into(), prefab_hash: -899013427i32, desc: "".into(), name: "Portables Connector".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -782951720i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerConnector".into(), prefab_hash: -782951720i32, desc: "Attaches a Kit (Portable Generator) to a power network." .into(), name: "Power Connector".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Portable Slot".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -65087121i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerTransmitter".into(), prefab_hash: -65087121i32, desc: "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter\'s collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output." .into(), name: "Microwave Power Transmitter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::PowerPotential, MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PositionX, MemoryAccess::Read), (LogicType::PositionY, MemoryAccess::Read), (LogicType::PositionZ, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Unlinked".into()), (1u32, "Linked".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -327468845i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerTransmitterOmni".into(), prefab_hash: -327468845i32, desc: "".into(), name: "Power Transmitter Omni".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1195820278i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerTransmitterReceiver".into(), prefab_hash: 1195820278i32, desc: "The Norsec Wireless Power Transmitter is an uni-directional, A-to-B, far field microwave electrical transmission system.The rotatable base transmitter delivers a narrow, non-lethal microwave beam to a dedicated base receiver.\nThe transmitter must be aligned to the base station in order to transmit any power. The brightness of the transmitter\'s collimator arc provides an indication of transmission intensity. Note that there is an attrition over longer ranges, so the unit requires more power over greater distances to deliver the same output.Connects to Logic Transmitter" .into(), name: "Microwave Power Receiver".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::PowerPotential, MemoryAccess::Read), (LogicType::PowerActual, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PositionX, MemoryAccess::Read), (LogicType::PositionY, MemoryAccess::Read), (LogicType::PositionZ, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Unlinked".into()), (1u32, "Linked".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: true, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 101488029i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerUmbilicalFemale".into(), prefab_hash: 101488029i32, desc: "".into(), name: "Umbilical Socket (Power)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1922506192i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerUmbilicalFemaleSide".into(), prefab_hash: 1922506192i32, desc: "".into(), name: "Umbilical Socket Angle (Power)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1529453938i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePowerUmbilicalMale".into(), prefab_hash: 1529453938i32, desc: "0.Left\n1.Center\n2.Right".into(), name: "Umbilical (Power)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Left".into()), (1u32, "Center".into()), (2u32, "Right" .into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 938836756i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePoweredVent".into(), prefab_hash: 938836756i32, desc: "Great for moving large quantities of air into a pipe network. Its primary purpose is for the creation of multi-grid airlocks. It can effeciently pull a vacuum on a small to medium sized room." .into(), name: "Powered Vent".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::PressureExternal, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Outward".into()), (1u32, "Inward".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -785498334i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePoweredVentLarge".into(), prefab_hash: -785498334i32, desc: "For building large scale airlock systems and pressurised hangers, a bigger and bolder version of the Powered Vent that can effeciently pull a vacuum in large room." .into(), name: "Powered Vent Large".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::PressureExternal, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Outward".into()), (1u32, "Inward".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 23052817i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurantValve".into(), prefab_hash: 23052817i32, desc: "Pumps gas into a liquid pipe in order to raise the pressure" .into(), name: "Pressurant Valve".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -624011170i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressureFedGasEngine".into(), prefab_hash: -624011170i32, desc: "Inefficient but very powerful, the Pressure Fed Gas Engine moves gas from each of its two inputs based on the pressure of the input pipes. Control the mixing ratio of fuels by tweaking the input pressures to target a 2:1 mix of Volatiles to Oxygen gas. Chilling propellant gasses or using Nitrous Oxide as an oxydizer will result in even higher thrust outputs." .into(), name: "Pressure Fed Gas Engine".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::Throttle, MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::PassedMoles, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 379750958i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressureFedLiquidEngine".into(), prefab_hash: 379750958i32, desc: "Highly efficient and powerful, the Pressure Fed Liquid Engine is a challenging engine to run in a stable configuration. Liquid is pulled from the input into the engine based on the input gas pressure. Some gas is also moved in this process so Stationeers will need to devise a system to maintain a high gas pressure in the liquid input pipe. The second liquid pipe connection is an optional heat-exchanger connection which exchanges heat between the pipes contents and the engine bell, the Setting variable drives the effectiveness of the heat-exchanger." .into(), name: "Pressure Fed Liquid Engine".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::Throttle, MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::PassedMoles, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input2 }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -2008706143i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurePlateLarge".into(), prefab_hash: -2008706143i32, desc: "".into(), name: "Trigger Plate (Large)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1269458680i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurePlateMedium".into(), prefab_hash: 1269458680i32, desc: "".into(), name: "Trigger Plate (Medium)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1536471028i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressurePlateSmall".into(), prefab_hash: -1536471028i32, desc: "".into(), name: "Trigger Plate (Small)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 209854039i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePressureRegulator".into(), prefab_hash: 209854039i32, desc: "Controlling the flow of gas between two pipe networks, pressure regulators shift gas until a set pressure on the outlet side is achieved, or the gas supply is exhausted. The back pressure regulator, by contrast, will only operate when pressure on the intake side exceeds the set value. With a max pressure of over 20,000kPa, it requires power to operate." .into(), name: "Pressure Regulator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 568800213i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureProximitySensor".into(), prefab_hash: 568800213i32, desc: "Will be triggered if there is a player in the range of the sensor (as defined by the setting dial). The quantity variable will show the number of players. You can configure the sensor to only detect players who hold the correct Access Card using a Cartridge (Access Controller) in a Handheld Tablet." .into(), name: "Proximity Sensor".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Activate, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Quantity, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -2031440019i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePumpedLiquidEngine".into(), prefab_hash: -2031440019i32, desc: "Liquid propellants bring greater efficiencies with Pumped Liquid Engine. Two inputs are provided so Stationeers can seperate their fuels, the Setting variable controls the mixing ratio of the inputs. The engine is designed to run on Liquid Volatiles and Liquid Oxygen, some Stationeers have reported excessive thrust values by switching to Liquid Nitrous Oxide" .into(), name: "Pumped Liquid Engine".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::Throttle, MemoryAccess::ReadWrite), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::PassedMoles, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -737232128i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructurePurgeValve".into(), prefab_hash: -737232128i32, desc: "Allows for removal of pressurant gas and evaporated liquids from a liquid pipe. Similar in function to a Back Pressure Regulator the Purge Valve moves gas from the input liquid pipe to the output gas pipe aiming to keep the pressure of the input at the target setting." .into(), name: "Purge Valve".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1756913871i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureRailing".into(), prefab_hash: -1756913871i32, desc: "\"Safety third.\"".into(), name: "Railing Industrial (Type 1)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1633947337i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRecycler".into(), prefab_hash: -1633947337i32, desc: "A device for collecting the raw resources while destroying an item. Produces Reagent Mix containing packages of reagents. Pass these through the Centrifuge to gain back the source ores. Plants and organic matter passed through will create Biomass, which when passed through the Centrifuge will produce Biomass." .into(), name: "Recycler".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: true, }, } .into(), ); map.insert( -1577831321i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRefrigeratedVendingMachine".into(), prefab_hash: -1577831321i32, desc: "The refrigerated OmniKool vending machine is an advanced version of the standard Vending Machine, which maintains an optimum pressure and constant temperature of -130 degrees C, to prevent food spoilage. It can hold up to 100 stacks.\nThe OmniKool also has an in-built Stacker, allowing players to set the stack sizes of any items ADDED to the device. The unit\'s default stack size is 50.\nNOTE: altering stack sizes DOES NOT update existing stacks within the machine, only those subsequently added. " .into(), name: "Refrigerated Vending Machine".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] .into_iter().collect()), (4u32, vec![] .into_iter().collect()), (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] .into_iter().collect()), (9u32, vec![] .into_iter().collect()), (10u32, vec![] .into_iter().collect()), (11u32, vec![] .into_iter() .collect()), (12u32, vec![] .into_iter().collect()), (13u32, vec![] .into_iter().collect()), (14u32, vec![] .into_iter().collect()), (15u32, vec![] .into_iter().collect()), (16u32, vec![] .into_iter() .collect()), (17u32, vec![] .into_iter().collect()), (18u32, vec![] .into_iter().collect()), (19u32, vec![] .into_iter().collect()), (20u32, vec![] .into_iter().collect()), (21u32, vec![] .into_iter() .collect()), (22u32, vec![] .into_iter().collect()), (23u32, vec![] .into_iter().collect()), (24u32, vec![] .into_iter().collect()), (25u32, vec![] .into_iter().collect()), (26u32, vec![] .into_iter() .collect()), (27u32, vec![] .into_iter().collect()), (28u32, vec![] .into_iter().collect()), (29u32, vec![] .into_iter().collect()), (30u32, vec![] .into_iter().collect()), (31u32, vec![] .into_iter() .collect()), (32u32, vec![] .into_iter().collect()), (33u32, vec![] .into_iter().collect()), (34u32, vec![] .into_iter().collect()), (35u32, vec![] .into_iter().collect()), (36u32, vec![] .into_iter() .collect()), (37u32, vec![] .into_iter().collect()), (38u32, vec![] .into_iter().collect()), (39u32, vec![] .into_iter().collect()), (40u32, vec![] .into_iter().collect()), (41u32, vec![] .into_iter() .collect()), (42u32, vec![] .into_iter().collect()), (43u32, vec![] .into_iter().collect()), (44u32, vec![] .into_iter().collect()), (45u32, vec![] .into_iter().collect()), (46u32, vec![] .into_iter() .collect()), (47u32, vec![] .into_iter().collect()), (48u32, vec![] .into_iter().collect()), (49u32, vec![] .into_iter().collect()), (50u32, vec![] .into_iter().collect()), (51u32, vec![] .into_iter() .collect()), (52u32, vec![] .into_iter().collect()), (53u32, vec![] .into_iter().collect()), (54u32, vec![] .into_iter().collect()), (55u32, vec![] .into_iter().collect()), (56u32, vec![] .into_iter() .collect()), (57u32, vec![] .into_iter().collect()), (58u32, vec![] .into_iter().collect()), (59u32, vec![] .into_iter().collect()), (60u32, vec![] .into_iter().collect()), (61u32, vec![] .into_iter() .collect()), (62u32, vec![] .into_iter().collect()), (63u32, vec![] .into_iter().collect()), (64u32, vec![] .into_iter().collect()), (65u32, vec![] .into_iter().collect()), (66u32, vec![] .into_iter() .collect()), (67u32, vec![] .into_iter().collect()), (68u32, vec![] .into_iter().collect()), (69u32, vec![] .into_iter().collect()), (70u32, vec![] .into_iter().collect()), (71u32, vec![] .into_iter() .collect()), (72u32, vec![] .into_iter().collect()), (73u32, vec![] .into_iter().collect()), (74u32, vec![] .into_iter().collect()), (75u32, vec![] .into_iter().collect()), (76u32, vec![] .into_iter() .collect()), (77u32, vec![] .into_iter().collect()), (78u32, vec![] .into_iter().collect()), (79u32, vec![] .into_iter().collect()), (80u32, vec![] .into_iter().collect()), (81u32, vec![] .into_iter() .collect()), (82u32, vec![] .into_iter().collect()), (83u32, vec![] .into_iter().collect()), (84u32, vec![] .into_iter().collect()), (85u32, vec![] .into_iter().collect()), (86u32, vec![] .into_iter() .collect()), (87u32, vec![] .into_iter().collect()), (88u32, vec![] .into_iter().collect()), (89u32, vec![] .into_iter().collect()), (90u32, vec![] .into_iter().collect()), (91u32, vec![] .into_iter() .collect()), (92u32, vec![] .into_iter().collect()), (93u32, vec![] .into_iter().collect()), (94u32, vec![] .into_iter().collect()), (95u32, vec![] .into_iter().collect()), (96u32, vec![] .into_iter() .collect()), (97u32, vec![] .into_iter().collect()), (98u32, vec![] .into_iter().collect()), (99u32, vec![] .into_iter().collect()), (100u32, vec![] .into_iter().collect()), (101u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RequestHash, MemoryAccess::ReadWrite), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: true, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 2027713511i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedCompositeWindow".into(), prefab_hash: 2027713511i32, desc: "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa." .into(), name: "Reinforced Window (Composite)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -816454272i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedCompositeWindowSteel".into(), prefab_hash: -816454272i32, desc: "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa." .into(), name: "Reinforced Window (Composite Steel)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1939061729i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedWallPaddedWindow".into(), prefab_hash: 1939061729i32, desc: "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa." .into(), name: "Reinforced Window (Padded)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 158502707i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureReinforcedWallPaddedWindowThin".into(), prefab_hash: 158502707i32, desc: "Enjoy vistas of even the most savage, alien landscapes with these heavy duty window frames, which are resistant to pressure differentials up to 1MPa." .into(), name: "Reinforced Window (Thin)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 808389066i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketAvionics".into(), prefab_hash: 808389066i32, desc: "".into(), name: "Rocket Avionics".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Reagents, MemoryAccess::Read), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::VelocityRelativeY, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::Progress, MemoryAccess::Read), (LogicType::DestinationCode, MemoryAccess::ReadWrite), (LogicType::Acceleration, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::AutoShutOff, MemoryAccess::ReadWrite), (LogicType::Mass, MemoryAccess::Read), (LogicType::DryMass, MemoryAccess::Read), (LogicType::Thrust, MemoryAccess::Read), (LogicType::Weight, MemoryAccess::Read), (LogicType::ThrustToWeight, MemoryAccess::Read), (LogicType::TimeToDestination, MemoryAccess::Read), (LogicType::BurnTimeRemaining, MemoryAccess::Read), (LogicType::AutoLand, MemoryAccess::Write), (LogicType::FlightControlRule, MemoryAccess::Read), (LogicType::ReEntryAltitude, MemoryAccess::Read), (LogicType::Apex, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::Discover, MemoryAccess::Read), (LogicType::Chart, MemoryAccess::Read), (LogicType::Survey, MemoryAccess::Read), (LogicType::NavPoints, MemoryAccess::Read), (LogicType::ChartedNavPoints, MemoryAccess::Read), (LogicType::Sites, MemoryAccess::Read), (LogicType::CurrentCode, MemoryAccess::Read), (LogicType::Density, MemoryAccess::Read), (LogicType::Richness, MemoryAccess::Read), (LogicType::Size, MemoryAccess::Read), (LogicType::TotalQuantity, MemoryAccess::Read), (LogicType::MinedQuantity, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Invalid".into()), (1u32, "None".into()), (2u32, "Mine" .into()), (3u32, "Survey".into()), (4u32, "Discover".into()), (5u32, "Chart".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: true, }, } .into(), ); map.insert( 997453927i32, StructureLogicDeviceMemoryTemplate { templateType: "StructureLogicDeviceMemory".into(), prefab: PrefabInfo { prefab_name: "StructureRocketCelestialTracker".into(), prefab_hash: 997453927i32, desc: "The Celestial Tracker can be placed in Rockets and when turned on will provide data that can be used to orientate devices such as the Telescope. The Horizontal and Vertical output is localized to the orientation of the tracker. You can calibrate your alignment by comparing the result for the primary body with the output from the Daylight Sensor. Full functionality will only be available in orbit, but you can configure using the primary body. For aligning with the telescope, have the face plate facing up and the cables facing in the same direction as for the telescope and the output values will be aligned." .into(), name: "Rocket Celestial Tracker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::Read), (LogicType::Vertical, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::Index, MemoryAccess::ReadWrite), (LogicType::CelestialHash, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, memory: MemoryInfo { instructions: Some( vec![ ("BodyOrientation".into(), Instruction { description : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CELESTIAL_INDEX | BYTE_8 |\r\n| 16-31 | HORIZONTAL_DECI_DEGREES | SHORT_16 |\r\n| 32-47 | VERTICAL_DECI_DEGREES | SHORT_16 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | CELESTIAL_INDEX | BYTE_8 |\r\n| 16-31 | HORIZONTAL_DECI_DEGREES | SHORT_16 |\r\n| 32-47 | VERTICAL_DECI_DEGREES | SHORT_16 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "CelestialTracking".into(), value : 1i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "CELESTIAL_INDEX".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 31u32)) }, name : "HORIZONTAL_DECI_DEGREES".into(), typ : InstructionPartType::Short16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((32u32, 47u32)) }, name : "VERTICAL_DECI_DEGREES".into(), typ : InstructionPartType::Short16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }) ] .into_iter() .collect(), ), memory_access: MemoryAccess::Read, memory_size: 12u32, }, } .into(), ); map.insert( 150135861i32, StructureCircuitHolderTemplate { templateType: "StructureCircuitHolder".into(), prefab: PrefabInfo { prefab_name: "StructureRocketCircuitHousing".into(), prefab_hash: 150135861i32, desc: "".into(), name: "Rocket Circuit Housing".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::LineNumber, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::LineNumber, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: true, }, slots: vec![ SlotInfo { name : "Programmable Chip".into(), typ : Class::ProgrammableChip } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: Some(6u32), has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 178472613i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketEngineTiny".into(), prefab_hash: 178472613i32, desc: "".into(), name: "Rocket Engine (Tiny)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1781051034i32, StructureLogicDeviceConsumerMemoryTemplate { templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureRocketManufactory".into(), prefab_hash: 1781051034i32, desc: "".into(), name: "Rocket Manufactory".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::ReadWrite), (LogicType::CompletionRatio, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: true, }, consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ ("ItemKitAccessBridge".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 9000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 3f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemKitChuteUmbilical".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 3f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemKitElectricUmbilical".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Gold".into(), 5f64), ("Steel" .into(), 5f64)] .into_iter().collect() }), ("ItemKitFuselage".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemKitGasUmbilical".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemKitGovernedGasRocketEngine".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 10f64), ("Gold".into(), 5f64), ("Iron".into(), 15f64)] .into_iter().collect() }), ("ItemKitLaunchMount".into(), Recipe { tier : MachineTier::TierOne, time : 240f64, energy : 120000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 60f64)] .into_iter().collect() }), ("ItemKitLaunchTower".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 30000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemKitLiquidUmbilical".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Steel" .into(), 5f64)] .into_iter().collect() }), ("ItemKitPressureFedGasEngine".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Constantan".into(), 10f64), ("Electrum".into(), 5f64), ("Invar".into(), 20f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemKitPressureFedLiquidEngine" .into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Astroloy".into(), 10f64), ("Inconel".into(), 5f64), ("Waspaloy".into(), 15f64)] .into_iter().collect() }), ("ItemKitPumpedLiquidEngine".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Constantan".into(), 10f64), ("Electrum".into(), 5f64), ("Steel".into(), 15f64)] .into_iter() .collect() }), ("ItemKitRocketAvionics".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 2f64), ("Solder".into(), 3f64)] .into_iter().collect() }), ("ItemKitRocketBattery".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 10000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Electrum".into(), 5f64), ("Solder".into(), 5f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemKitRocketCargoStorage".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 30000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Constantan".into(), 10f64), ("Invar".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() .collect() }), ("ItemKitRocketCelestialTracker".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 5f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemKitRocketCircuitHousing".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 2f64), ("Solder".into(), 3f64)] .into_iter().collect() }), ("ItemKitRocketDatalink".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 2f64), ("Solder".into(), 3f64)] .into_iter().collect() }), ("ItemKitRocketGasFuelTank".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemKitRocketLiquidFuelTank".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Steel" .into(), 20f64)] .into_iter().collect() }), ("ItemKitRocketMiner" .into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Constantan".into(), 10f64), ("Electrum".into(), 5f64), ("Invar".into(), 5f64), ("Steel".into(), 10f64)] .into_iter() .collect() }), ("ItemKitRocketScanner".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 10f64), ("Gold" .into(), 10f64)] .into_iter().collect() }), ("ItemKitRocketTransformerSmall".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 12000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 5f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemKitStairwell".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 6000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 15f64)] .into_iter().collect() }), ("ItemRocketMiningDrillHead".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 20f64)] .into_iter().collect() }), ("ItemRocketMiningDrillHeadDurable" .into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron" .into(), 10f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemRocketMiningDrillHeadHighSpeedIce".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Invar".into(), 5f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemRocketMiningDrillHeadHighSpeedMineral".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Invar".into(), 5f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemRocketMiningDrillHeadIce".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron".into(), 10f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemRocketMiningDrillHeadLongTerm".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Invar".into(), 5f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemRocketMiningDrillHeadMineral".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 5000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron".into(), 10f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemRocketScanningHead" .into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 60000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 2f64)] .into_iter() .collect() }) ] .into_iter() .collect(), }), memory: MemoryInfo { instructions: Some( vec![ ("DeviceSetLock".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : InstructionPartType::Bool8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(48u32) }] .into_iter().collect() }), ("EjectAllReagents".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }), ("EjectReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }), ("ExecuteRecipe".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("JumpIfNextInvalid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("JumpToAddress".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("MissingRecipeReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, Some(62u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("StackPointer".into(), Instruction { description : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("WaitUntilNextValid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }) ] .into_iter() .collect(), ), memory_access: MemoryAccess::ReadWrite, memory_size: 64u32, }, } .into(), ); map.insert( -2087223687i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketMiner".into(), prefab_hash: -2087223687i32, desc: "Gathers available resources at the rocket\'s current space location." .into(), name: "Rocket Miner".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::DrillCondition, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Drill Head Slot".into(), typ : Class::DrillHead } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 2014252591i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketScanner".into(), prefab_hash: 2014252591i32, desc: "".into(), name: "Rocket Scanner".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Scanner Head Slot".into(), typ : Class::ScanningHead } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -654619479i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureRocketTower".into(), prefab_hash: -654619479i32, desc: "".into(), name: "Launch Tower".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 518925193i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureRocketTransformerSmall".into(), prefab_hash: 518925193i32, desc: "".into(), name: "Transformer Small (Rocket)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 806513938i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureRover".into(), prefab_hash: 806513938i32, desc: "".into(), name: "Rover Frame".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1875856925i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSDBHopper".into(), prefab_hash: -1875856925i32, desc: "".into(), name: "SDB Hopper".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Import".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 467225612i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSDBHopperAdvanced".into(), prefab_hash: 467225612i32, desc: "".into(), name: "SDB Hopper Advanced".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Import".into(), typ : Class::None }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1155865682i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSDBSilo".into(), prefab_hash: 1155865682i32, desc: "The majestic silo holds large quantities of almost anything. While it is doing that, it cannot be deconstructed. Note also, that any food you put into a silo is likely to decay extremely rapidly. The silo can hold up to 600 stacks." .into(), name: "SDB Silo".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Mode0".into()), (1u32, "Mode1".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 439026183i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSatelliteDish".into(), prefab_hash: 439026183i32, desc: "This medium communications unit can be used to communicate with nearby trade vessels.\n \nWhen connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic." .into(), name: "Medium Satellite Dish".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::SignalStrength, MemoryAccess::Read), (LogicType::SignalId, MemoryAccess::Read), (LogicType::InterrogationProgress, MemoryAccess::Read), (LogicType::TargetPadIndex, MemoryAccess::ReadWrite), (LogicType::SizeX, MemoryAccess::Read), (LogicType::SizeZ, MemoryAccess::Read), (LogicType::MinimumWattsToContact, MemoryAccess::Read), (LogicType::WattsReachingContact, MemoryAccess::Read), (LogicType::ContactTypeId, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::BestContactFilter, MemoryAccess::ReadWrite), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -641491515i32, StructureLogicDeviceConsumerMemoryTemplate { templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureSecurityPrinter".into(), prefab_hash: -641491515i32, desc: "Any Stationeer concerned about security needs the Harkwell-designed Vigilant-E security printer. Use the Vigilant-E to create a Cartridge (Access Controller), in order to restrict access to different parts of your base via keycards like the Access Card (Blue). The printer also makes a variety of weapons and ammunitions to defend your base against any hostile, aggressive or just slightly rude entites you encounter as you explore the Solar System.\n" .into(), name: "Security Printer".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::ReadWrite), (LogicType::CompletionRatio, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: true, }, consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ ("AccessCardBlack".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("AccessCardBlue" .into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("AccessCardBrown".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 1f64)] .into_iter() .collect() }), ("AccessCardGray".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" .into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("AccessCardGreen".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("AccessCardKhaki" .into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("AccessCardOrange".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 1f64)] .into_iter() .collect() }), ("AccessCardPink".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" .into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("AccessCardPurple".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("AccessCardRed" .into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("AccessCardWhite".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold".into(), 1f64), ("Iron".into(), 1f64)] .into_iter() .collect() }), ("AccessCardYellow".into(), Recipe { tier : MachineTier::TierOne, time : 2f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Gold" .into(), 1f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("CartridgeAccessController".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Iron".into(), 1f64)] .into_iter().collect() }), ("FireArmSMG".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Nickel".into(), 10f64), ("Steel".into(), 30f64)] .into_iter().collect() }), ("Handgun".into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Nickel".into(), 10f64), ("Steel".into(), 30f64)] .into_iter().collect() }), ("HandgunMagazine".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Lead".into(), 1f64), ("Steel".into(), 3f64)] .into_iter().collect() }), ("ItemAmmoBox" .into(), Recipe { tier : MachineTier::TierOne, time : 120f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 30f64), ("Lead".into(), 50f64), ("Steel" .into(), 30f64)] .into_iter().collect() }), ("ItemExplosive".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 5i64, reagents : vec![("Copper".into(), 5f64), ("Electrum".into(), 1f64), ("Gold".into(), 5f64), ("Lead" .into(), 10f64), ("Steel".into(), 7f64)] .into_iter().collect() }), ("ItemGrenade".into(), Recipe { tier : MachineTier::TierOne, time : 90f64, energy : 2900f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 15f64), ("Gold".into(), 1f64), ("Lead".into(), 25f64), ("Steel".into(), 25f64)] .into_iter() .collect() }), ("ItemMiningCharge".into(), Recipe { tier : MachineTier::TierOne, time : 7f64, energy : 200f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Iron".into(), 7f64), ("Lead".into(), 10f64)] .into_iter().collect() }), ("SMGMagazine".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Lead" .into(), 1f64), ("Steel".into(), 3f64)] .into_iter().collect() }), ("WeaponPistolEnergy".into(), Recipe { tier : MachineTier::TierTwo, time : 120f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), 20f64), ("Gold".into(), 10f64), ("Solder".into(), 10f64), ("Steel".into(), 10f64)] .into_iter() .collect() }), ("WeaponRifleEnergy".into(), Recipe { tier : MachineTier::TierTwo, time : 240f64, energy : 10000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 6i64, reagents : vec![("Constantan".into(), 10f64), ("Electrum".into(), 20f64), ("Gold".into(), 10f64), ("Invar".into(), 10f64), ("Solder".into(), 10f64), ("Steel".into(), 20f64)] .into_iter().collect() }) ] .into_iter() .collect(), }), memory: MemoryInfo { instructions: Some( vec![ ("DeviceSetLock".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : InstructionPartType::Bool8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(48u32) }] .into_iter().collect() }), ("EjectAllReagents".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }), ("EjectReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }), ("ExecuteRecipe".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("JumpIfNextInvalid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("JumpToAddress".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("MissingRecipeReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, Some(62u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("StackPointer".into(), Instruction { description : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("WaitUntilNextValid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }) ] .into_iter() .collect(), ), memory_access: MemoryAccess::ReadWrite, memory_size: 64u32, }, } .into(), ); map.insert( 1172114950i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureShelf".into(), prefab_hash: 1172114950i32, desc: "".into(), name: "Shelf".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), } .into(), ); map.insert( 182006674i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShelfMedium".into(), prefab_hash: 182006674i32, desc: "A shelf for putting things on, so you can see them.".into(), name: "Shelf Medium".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (10u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (11u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (12u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (13u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (14u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1330754486i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShortCornerLocker".into(), prefab_hash: 1330754486i32, desc: "".into(), name: "Short Corner Locker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -554553467i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShortLocker".into(), prefab_hash: -554553467i32, desc: "".into(), name: "Short Locker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -775128944i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShower".into(), prefab_hash: -775128944i32, desc: "".into(), name: "Shower".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1081797501i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureShowerPowered".into(), prefab_hash: -1081797501i32, desc: "".into(), name: "Shower (Powered)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 879058460i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSign1x1".into(), prefab_hash: 879058460i32, desc: "".into(), name: "Sign 1x1".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 908320837i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSign2x1".into(), prefab_hash: 908320837i32, desc: "".into(), name: "Sign 2x1".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -492611i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSingleBed".into(), prefab_hash: -492611i32, desc: "Description coming.".into(), name: "Single Bed".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Bed".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1467449329i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeper".into(), prefab_hash: -1467449329i32, desc: "".into(), name: "Sleeper".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Bed".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1213495833i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperLeft".into(), prefab_hash: 1213495833i32, desc: "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided." .into(), name: "Sleeper Left".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, "Unpowered".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1812330717i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperRight".into(), prefab_hash: -1812330717i32, desc: "A horizontal variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided." .into(), name: "Sleeper Right".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, "Unpowered".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1300059018i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperVertical".into(), prefab_hash: -1300059018i32, desc: "The vertical variant of the sleeper. Will keep players hydrated and fed while they are logged out - as long as a breathable atmosphere is provided." .into(), name: "Sleeper Vertical".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.1f32, radiation_factor: 0.1f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::EntityState, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Safe".into()), (1u32, "Unsafe".into()), (2u32, "Unpowered".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1382098999i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSleeperVerticalDroid".into(), prefab_hash: 1382098999i32, desc: "The Droid Sleeper will recharge robot batteries and equiped suit batteries if present. This sleeper variant is only safe for robots. Entering as a non robot character will cause you to take damage." .into(), name: "Droid Sleeper Vertical".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Player".into(), typ : Class::Entity }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1310303582i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallDirectHeatExchangeGastoGas".into(), prefab_hash: 1310303582i32, desc: "Direct Heat Exchangers equalize the temperature of the two input networks." .into(), name: "Small Direct Heat Exchanger - Gas + Gas".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1825212016i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallDirectHeatExchangeLiquidtoGas".into(), prefab_hash: 1825212016i32, desc: "Direct Heat Exchangers equalize the temperature of the two input networks." .into(), name: "Small Direct Heat Exchanger - Liquid + Gas ".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -507770416i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallDirectHeatExchangeLiquidtoLiquid".into(), prefab_hash: -507770416i32, desc: "Direct Heat Exchangers equalize the temperature of the two input networks." .into(), name: "Small Direct Heat Exchanger - Liquid + Liquid".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input2 } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -2138748650i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSmallSatelliteDish".into(), prefab_hash: -2138748650i32, desc: "This small communications unit can be used to communicate with nearby trade vessels.\n\n When connected to a Computer containing a Communications Motherboard motherboard, a Landingpad Center, and a Vending Machine, this allows Stationeers to contact traders. Adjust its horizontal and vertical attributes either directly or through logic." .into(), name: "Small Satellite Dish".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::SignalStrength, MemoryAccess::Read), (LogicType::SignalId, MemoryAccess::Read), (LogicType::InterrogationProgress, MemoryAccess::Read), (LogicType::TargetPadIndex, MemoryAccess::ReadWrite), (LogicType::SizeX, MemoryAccess::Read), (LogicType::SizeZ, MemoryAccess::Read), (LogicType::MinimumWattsToContact, MemoryAccess::Read), (LogicType::WattsReachingContact, MemoryAccess::Read), (LogicType::ContactTypeId, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::BestContactFilter, MemoryAccess::ReadWrite), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1633000411i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableBacklessDouble".into(), prefab_hash: -1633000411i32, desc: "".into(), name: "Small (Table Backless Double)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1897221677i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableBacklessSingle".into(), prefab_hash: -1897221677i32, desc: "".into(), name: "Small (Table Backless Single)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1260651529i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableDinnerSingle".into(), prefab_hash: 1260651529i32, desc: "".into(), name: "Small (Table Dinner Single)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -660451023i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableRectangleDouble".into(), prefab_hash: -660451023i32, desc: "".into(), name: "Small (Table Rectangle Double)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -924678969i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableRectangleSingle".into(), prefab_hash: -924678969i32, desc: "".into(), name: "Small (Table Rectangle Single)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -19246131i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableThickDouble".into(), prefab_hash: -19246131i32, desc: "".into(), name: "Small (Table Thick Double)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -291862981i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureSmallTableThickSingle".into(), prefab_hash: -291862981i32, desc: "".into(), name: "Small Table (Thick Single)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2045627372i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanel".into(), prefab_hash: -2045627372i32, desc: "Sinotai\'s standard solar panels are used for generating power from sunlight. They can be connected to Logic systems, in order to track sunlight, but their reduced during storms and when damaged. You can repair these using some trusty Duct Tape." .into(), name: "Solar Panel".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1554349863i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanel45".into(), prefab_hash: -1554349863i32, desc: "Sinotai basic solar panels generate power from sunlight, sitting at 45 degrees to the ground. Their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape." .into(), name: "Solar Panel (Angled)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 930865127i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanel45Reinforced".into(), prefab_hash: 930865127i32, desc: "This solar panel is resistant to storm damage.".into(), name: "Solar Panel (Heavy Angled)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -539224550i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelDual".into(), prefab_hash: -539224550i32, desc: "Sinotai dual solar panels are used for generating power from sunlight, with dedicated data and power ports. They can be connected to {Logic systems, in order to track sunlight, but their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape." .into(), name: "Solar Panel (Dual)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1545574413i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelDualReinforced".into(), prefab_hash: -1545574413i32, desc: "This solar panel is resistant to storm damage.".into(), name: "Solar Panel (Heavy Dual)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1968102968i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelFlat".into(), prefab_hash: 1968102968i32, desc: "Sinotai basic solar panels generate power from sunlight. They lie flat to the ground, and their efficiency is reduced during storms and when damaged. You can repair these using some trusty Duct Tape." .into(), name: "Solar Panel (Flat)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1697196770i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelFlatReinforced".into(), prefab_hash: 1697196770i32, desc: "This solar panel is resistant to storm damage.".into(), name: "Solar Panel (Heavy Flat)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -934345724i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSolarPanelReinforced".into(), prefab_hash: -934345724i32, desc: "This solar panel is resistant to storm damage.".into(), name: "Solar Panel (Heavy)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Charge, MemoryAccess::Read), (LogicType::Horizontal, MemoryAccess::ReadWrite), (LogicType::Vertical, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 813146305i32, StructureLogicDeviceConsumerTemplate { templateType: "StructureLogicDeviceConsumer".into(), prefab: PrefabInfo { prefab_name: "StructureSolidFuelGenerator".into(), prefab_hash: 813146305i32, desc: "The mainstay of power generation for Stationeers, this device provides 20kW of power. Multiple solid resources can be loaded. While operating, the device will output its maximum power regardless of whether you have captured it or not. Watch for blown wires! It will output much more power than your regular Cable Coil can handle." .into(), name: "Generator (Solid Fuel)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PowerGeneration, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Not Generating".into()), (1u32, "Generating".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Input".into(), typ : Class::Ore }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemCharcoal".into(), "ItemCoalOre".into(), "ItemSolidFuel".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, fabricator_info: None, } .into(), ); map.insert( -1009150565i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSorter".into(), prefab_hash: -1009150565i32, desc: "No amount of automation is complete without some way of moving different items to different parts of a system. The Xigo A2B sorter can be programmed via a computer with a Sorter Motherboard to direct various items into different chute networks. Filtered items are always passed out the righthand side of the sorter, while non filtered items continue straight through." .into(), name: "Sorter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::Output, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "Split".into()), (1u32, "Filter".into()), (2u32, "Logic" .into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Export 2" .into(), typ : Class::None }, SlotInfo { name : "Data Disk".into(), typ : Class::DataDisk } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output2 }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -2020231820i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStacker".into(), prefab_hash: -2020231820i32, desc: "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed." .into(), name: "Stacker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::Output, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Automatic".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Processing" .into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1585641623i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStackerReverse".into(), prefab_hash: 1585641623i32, desc: "A stacker is an important part of any automated chute network. The Xigo ProKompile can be set manually or via logic, to make sure items passing through the stacker are maximized for your storage needs. The reversed stacker has power and data on the opposite side.\nThe ProKompile can stack a wide variety of things such as ingots, as well as splitting stacks into appropriate sizes as needed." .into(), name: "Stacker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::Output, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Automatic".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1405018945i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2".into(), prefab_hash: 1405018945i32, desc: "".into(), name: "Stairs".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 155214029i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2RailL".into(), prefab_hash: 155214029i32, desc: "".into(), name: "Stairs with Rail (Left)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -212902482i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2RailR".into(), prefab_hash: -212902482i32, desc: "".into(), name: "Stairs with Rail (Right)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1088008720i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairs4x2Rails".into(), prefab_hash: -1088008720i32, desc: "".into(), name: "Stairs with Rails".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 505924160i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellBackLeft".into(), prefab_hash: 505924160i32, desc: "".into(), name: "Stairwell (Back Left)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -862048392i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellBackPassthrough".into(), prefab_hash: -862048392i32, desc: "".into(), name: "Stairwell (Back Passthrough)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2128896573i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellBackRight".into(), prefab_hash: -2128896573i32, desc: "".into(), name: "Stairwell (Back Right)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -37454456i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellFrontLeft".into(), prefab_hash: -37454456i32, desc: "".into(), name: "Stairwell (Front Left)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1625452928i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellFrontPassthrough".into(), prefab_hash: -1625452928i32, desc: "".into(), name: "Stairwell (Front Passthrough)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 340210934i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellFrontRight".into(), prefab_hash: 340210934i32, desc: "".into(), name: "Stairwell (Front Right)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2049879875i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureStairwellNoDoors".into(), prefab_hash: 2049879875i32, desc: "".into(), name: "Stairwell (No Doors)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -260316435i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStirlingEngine".into(), prefab_hash: -260316435i32, desc: "Harnessing an ancient thermal exploit, the Recurso \'Libra\' Stirling Engine generates power via the expansion and contraction of a working gas to drive pistons operating an electrical generator.\n \nWhen high pressure hot gas is supplied into the input pipe, this gas will heat the hot side of the unit, then pass into the output pipe. The cooler side uses the room\'s ambient atmosphere, which must be kept at a lower temperature and pressure in order to create a differential. Add a working gas by inserting a Gas Canister. The unit must be deactivated when adding or removing canisters, or the working gas may leak into the surrounding atmosphere.\n \nGases with a low molecular mass make the most efficient working gases. Increasing the moles of working gas can result in a greater potential power output. However, overpressuring the unit may have ... sub-optimal results." .into(), name: "Stirling Engine".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.15f32, radiation_factor: 0.15f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PowerGeneration, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::EnvironmentEfficiency, MemoryAccess::Read), (LogicType::WorkingGasEfficiency, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Gas Canister".into(), typ : Class::GasCanister } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -793623899i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureStorageLocker".into(), prefab_hash: -793623899i32, desc: "".into(), name: "Locker".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (3u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (4u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (5u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (6u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (7u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (8u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (9u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (10u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (11u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (12u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (13u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (14u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (15u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (16u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (17u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (18u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (19u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (20u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (21u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (22u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (23u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (24u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (25u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (26u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (27u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (28u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (29u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 255034731i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureSuitStorage".into(), prefab_hash: 255034731i32, desc: "As tidy as it is useful, the suit storage rack holds an Eva Suit, Space Helmet and a Jetpack Basic.\nWhen powered and connected to and , it will recharge the suit\'s batteries, refill the Canister (Oxygen) and your Filter (Nitrogen) Gas Canister. The wastetank will be pumped out to the pipe connected to the waste outlet.\nAll the rack\'s pipes must be connected or the unit will show an error state, but it will still charge the battery." .into(), name: "Suit Storage".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::On, MemoryAccess::ReadWrite), (LogicSlotType::Lock, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::PressureWaste, MemoryAccess::Read), (LogicSlotType::PressureAir, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (2u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Helmet".into(), typ : Class::Helmet }, SlotInfo { name : "Suit".into(), typ : Class::Suit }, SlotInfo { name : "Back".into(), typ : Class::Back } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input2 }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1606848156i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankBig".into(), prefab_hash: -1606848156i32, desc: "".into(), name: "Large Tank".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1280378227i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankBigInsulated".into(), prefab_hash: 1280378227i32, desc: "".into(), name: "Tank Big (Insulated)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -1276379454i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureTankConnector".into(), prefab_hash: -1276379454i32, desc: "Tank connectors are basic mounting devices that allow you to attach a Portable Gas Tank to a gas pipe network." .into(), name: "Tank Connector".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( 1331802518i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureTankConnectorLiquid".into(), prefab_hash: 1331802518i32, desc: "These basic mounting devices allow you to attach a Portable Liquid Tank to a liquid pipe network." .into(), name: "Liquid Tank Connector".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.010000001f32, radiation_factor: 0.0005f32, }), internal_atmo_info: None, slots: vec![SlotInfo { name : "Portable Slot".into(), typ : Class::None }] .into_iter() .collect(), } .into(), ); map.insert( 1013514688i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmall".into(), prefab_hash: 1013514688i32, desc: "".into(), name: "Small Tank".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 955744474i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmallAir".into(), prefab_hash: 955744474i32, desc: "".into(), name: "Small Tank (Air)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 2102454415i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmallFuel".into(), prefab_hash: 2102454415i32, desc: "".into(), name: "Small Tank (Fuel)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0.05f32, radiation_factor: 0.002f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 272136332i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTankSmallInsulated".into(), prefab_hash: 272136332i32, desc: "".into(), name: "Tank Small (Insulated)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: Some(ThermalInfo { convection_factor: 0f32, radiation_factor: 0f32, }), internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Pressure, MemoryAccess::Read), (LogicType::Temperature, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::RatioOxygen, MemoryAccess::Read), (LogicType::RatioCarbonDioxide, MemoryAccess::Read), (LogicType::RatioNitrogen, MemoryAccess::Read), (LogicType::RatioPollutant, MemoryAccess::Read), (LogicType::RatioVolatiles, MemoryAccess::Read), (LogicType::RatioWater, MemoryAccess::Read), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::TotalMoles, MemoryAccess::Read), (LogicType::Volume, MemoryAccess::Read), (LogicType::RatioNitrousOxide, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::Combustion, MemoryAccess::Read), (LogicType::RatioLiquidNitrogen, MemoryAccess::Read), (LogicType::VolumeOfLiquid, MemoryAccess::Read), (LogicType::RatioLiquidOxygen, MemoryAccess::Read), (LogicType::RatioLiquidVolatiles, MemoryAccess::Read), (LogicType::RatioSteam, MemoryAccess::Read), (LogicType::RatioLiquidCarbonDioxide, MemoryAccess::Read), (LogicType::RatioLiquidPollutant, MemoryAccess::Read), (LogicType::RatioLiquidNitrousOxide, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::RatioHydrogen, MemoryAccess::Read), (LogicType::RatioLiquidHydrogen, MemoryAccess::Read), (LogicType::RatioPollutedWater, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: true, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( -465741100i32, StructureLogicDeviceConsumerMemoryTemplate { templateType: "StructureLogicDeviceConsumerMemory".into(), prefab: PrefabInfo { prefab_name: "StructureToolManufactory".into(), prefab_hash: -465741100i32, desc: "No mission can be completed without the proper tools. The Norsec ThuulDek manufactory can fabricate almost any tool or hand-held device a Stationeer may need to complete their mission, as well as a variety of delightful paints.\nUpgrade the device using a Tool Printer Mod for additional recipes and faster processing speeds." .into(), name: "Tool Manufactory".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Reagents, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RecipeHash, MemoryAccess::ReadWrite), (LogicType::CompletionRatio, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::Ingot }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: true, has_reagents: true, }, consumer_info: ConsumerInfo { consumed_resouces: vec![ "ItemAstroloyIngot".into(), "ItemConstantanIngot".into(), "ItemCopperIngot".into(), "ItemElectrumIngot".into(), "ItemGoldIngot" .into(), "ItemHastelloyIngot".into(), "ItemInconelIngot".into(), "ItemInvarIngot".into(), "ItemIronIngot".into(), "ItemLeadIngot" .into(), "ItemNickelIngot".into(), "ItemSiliconIngot".into(), "ItemSilverIngot".into(), "ItemSolderIngot".into(), "ItemSolidFuel" .into(), "ItemSteelIngot".into(), "ItemStelliteIngot".into(), "ItemWaspaloyIngot".into(), "ItemWasteIngot".into() ] .into_iter() .collect(), processed_reagents: vec![].into_iter().collect(), }, fabricator_info: Some(FabricatorInfo { tier: MachineTier::Undefined, recipes: vec![ ("FlareGun".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron".into(), 10f64), ("Silicon".into(), 10f64)] .into_iter().collect() }), ("ItemAngleGrinder".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Iron" .into(), 3f64)] .into_iter().collect() }), ("ItemArcWelder".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), 10f64), ("Invar".into(), 5f64), ("Solder".into(), 10f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("ItemBasketBall".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 1f64)] .into_iter().collect() }), ("ItemBeacon".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 1f64), ("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemChemLightBlue".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 1f64)] .into_iter().collect() }), ("ItemChemLightGreen".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 1f64)] .into_iter().collect() }), ("ItemChemLightRed".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 1f64)] .into_iter().collect() }), ("ItemChemLightWhite".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 1f64)] .into_iter().collect() }), ("ItemChemLightYellow".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 1f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_Aus".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_Brazil".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_Canada" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_China".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_EU".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_France" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_Germany".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_Japan".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_Korea" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_NZ".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_Russia".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_SouthAfrica".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_UK".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_US" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemClothingBagOveralls_Ukraine".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("ItemCrowbar".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemDirtCanister".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 400f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemDisposableBatteryCharger".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 2f64), ("Iron".into(), 2f64)] .into_iter() .collect() }), ("ItemDrill".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron" .into(), 5f64)] .into_iter().collect() }), ("ItemDuctTape".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemEvaSuit".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemFlagSmall".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemFlashlight".into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64)] .into_iter().collect() }), ("ItemGlasses".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 250f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Iron".into(), 15f64), ("Silicon".into(), 10f64)] .into_iter().collect() }), ("ItemHardBackpack".into(), Recipe { tier : MachineTier::TierTwo, time : 30f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Astroloy".into(), 5f64), ("Steel".into(), 15f64), ("Stellite".into(), 5f64)] .into_iter().collect() }), ("ItemHardJetpack".into(), Recipe { tier : MachineTier::TierTwo, time : 40f64, energy : 1750f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Astroloy".into(), 8f64), ("Steel".into(), 20f64), ("Stellite".into(), 8f64), ("Waspaloy".into(), 8f64)] .into_iter() .collect() }), ("ItemHardMiningBackPack".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Invar".into(), 1f64), ("Steel" .into(), 6f64)] .into_iter().collect() }), ("ItemHardSuit".into(), Recipe { tier : MachineTier::TierTwo, time : 60f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Astroloy".into(), 10f64), ("Steel".into(), 20f64), ("Stellite".into(), 2f64)] .into_iter().collect() }), ("ItemHardsuitHelmet".into(), Recipe { tier : MachineTier::TierTwo, time : 50f64, energy : 1750f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Astroloy".into(), 2f64), ("Steel".into(), 10f64), ("Stellite".into(), 2f64)] .into_iter().collect() }), ("ItemIgniter".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Copper".into(), 3f64)] .into_iter().collect() }), ("ItemJetpackBasic".into(), Recipe { tier : MachineTier::TierOne, time : 30f64, energy : 1500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Gold".into(), 2f64), ("Lead" .into(), 5f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemKitBasket".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemLabeller".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Gold".into(), 1f64), ("Iron" .into(), 2f64)] .into_iter().collect() }), ("ItemMKIIAngleGrinder" .into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 1f64), ("Electrum".into(), 4f64), ("Iron" .into(), 3f64)] .into_iter().collect() }), ("ItemMKIIArcWelder" .into(), Recipe { tier : MachineTier::TierTwo, time : 30f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), 14f64), ("Invar".into(), 5f64), ("Solder" .into(), 10f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemMKIICrowbar".into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 5f64), ("Iron".into(), 5f64)] .into_iter().collect() }), ("ItemMKIIDrill".into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 5f64), ("Electrum".into(), 5f64), ("Iron".into(), 5f64)] .into_iter() .collect() }), ("ItemMKIIDuctTape".into(), Recipe { tier : MachineTier::TierTwo, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 1f64), ("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemMKIIMiningDrill".into(), Recipe { tier : MachineTier::TierTwo, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 2f64), ("Electrum".into(), 5f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemMKIIScrewdriver".into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 2f64), ("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemMKIIWireCutters".into(), Recipe { tier : MachineTier::TierTwo, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 5f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemMKIIWrench".into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Electrum".into(), 3f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemMarineBodyArmor".into(), Recipe { tier : MachineTier::TierOne, time : 60f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Nickel".into(), 10f64), ("Silicon".into(), 10f64), ("Steel".into(), 20f64)] .into_iter().collect() }), ("ItemMarineHelmet".into(), Recipe { tier : MachineTier::TierOne, time : 45f64, energy : 1750f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Gold".into(), 4f64), ("Silicon" .into(), 4f64), ("Steel".into(), 8f64)] .into_iter().collect() }), ("ItemMiningBackPack".into(), Recipe { tier : MachineTier::TierOne, time : 8f64, energy : 800f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 6f64)] .into_iter().collect() }), ("ItemMiningBelt".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemMiningBeltMKII".into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Constantan".into(), 5f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemMiningDrill".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" .into(), 3f64)] .into_iter().collect() }), ("ItemMiningDrillHeavy" .into(), Recipe { tier : MachineTier::TierTwo, time : 30f64, energy : 2500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), 5f64), ("Invar".into(), 10f64), ("Solder" .into(), 10f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemMiningDrillPneumatic".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 4f64), ("Solder".into(), 4f64), ("Steel".into(), 6f64)] .into_iter() .collect() }), ("ItemMkIIToolbelt".into(), Recipe { tier : MachineTier::TierTwo, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Constantan".into(), 5f64), ("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemNVG".into(), Recipe { tier : MachineTier::TierOne, time : 45f64, energy : 2750f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Hastelloy" .into(), 10f64), ("Silicon".into(), 5f64), ("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemPickaxe".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Iron" .into(), 2f64)] .into_iter().collect() }), ("ItemPlantSampler" .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 5f64), ("Iron".into(), 5f64)] .into_iter() .collect() }), ("ItemRemoteDetonator".into(), Recipe { tier : MachineTier::TierOne, time : 4.5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Gold".into(), 1f64), ("Iron" .into(), 3f64)] .into_iter().collect() }), ("ItemReusableFireExtinguisher".into(), Recipe { tier : MachineTier::TierOne, time : 20f64, energy : 1000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Steel".into(), 5f64)] .into_iter().collect() }), ("ItemRoadFlare".into(), Recipe { tier : MachineTier::TierOne, time : 1f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemScrewdriver".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 2f64)] .into_iter().collect() }), ("ItemSensorLenses".into(), Recipe { tier : MachineTier::TierTwo, time : 45f64, energy : 3500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 3i64, reagents : vec![("Inconel".into(), 5f64), ("Silicon".into(), 5f64), ("Steel".into(), 5f64)] .into_iter() .collect() }), ("ItemSensorProcessingUnitCelestialScanner".into(), Recipe { tier : MachineTier::TierTwo, time : 15f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), 5f64), ("Silicon" .into(), 5f64)] .into_iter().collect() }), ("ItemSensorProcessingUnitMesonScanner".into(), Recipe { tier : MachineTier::TierTwo, time : 15f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 5f64), ("Gold" .into(), 5f64), ("Iron".into(), 5f64), ("Silicon".into(), 5f64)] .into_iter().collect() }), ("ItemSensorProcessingUnitOreScanner" .into(), Recipe { tier : MachineTier::TierTwo, time : 15f64, energy : 100f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 4i64, reagents : vec![("Copper".into(), 5f64), ("Gold".into(), 5f64), ("Iron".into(), 5f64), ("Silicon".into(), 5f64)] .into_iter().collect() }), ("ItemSpaceHelmet".into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold".into(), 2f64)] .into_iter().collect() }), ("ItemSpacepack".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Iron" .into(), 5f64)] .into_iter().collect() }), ("ItemSprayCanBlack" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanBlue" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanBrown" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanGreen" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanGrey" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanKhaki" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanOrange" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanPink" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanPurple" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron" .into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanRed".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanWhite".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemSprayCanYellow".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 1f64)] .into_iter().collect() }), ("ItemSprayGun".into(), Recipe { tier : MachineTier::TierTwo, time : 10f64, energy : 2000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Invar".into(), 5f64), ("Silicon".into(), 10f64), ("Steel".into(), 10f64)] .into_iter().collect() }), ("ItemTerrainManipulator".into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 600f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 3i64, reagents : vec![("Copper".into(), 3f64), ("Gold".into(), 2f64), ("Iron".into(), 5f64)] .into_iter() .collect() }), ("ItemToolBelt".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemWearLamp".into(), Recipe { tier : MachineTier::TierOne, time : 15f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 2f64), ("Gold" .into(), 2f64)] .into_iter().collect() }), ("ItemWeldingTorch" .into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Copper".into(), 1f64), ("Iron".into(), 3f64)] .into_iter() .collect() }), ("ItemWireCutters".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }), ("ItemWrench".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Iron".into(), 3f64)] .into_iter().collect() }), ("ToyLuna".into(), Recipe { tier : MachineTier::TierOne, time : 10f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 2i64, reagents : vec![("Gold".into(), 1f64), ("Iron" .into(), 5f64)] .into_iter().collect() }), ("UniformCommander" .into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 25f64)] .into_iter().collect() }), ("UniformMarine".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 10f64)] .into_iter().collect() }), ("UniformOrangeJumpSuit".into(), Recipe { tier : MachineTier::TierOne, time : 5f64, energy : 500f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 1i64, reagents : vec![("Silicon".into(), 10f64)] .into_iter().collect() }), ("WeaponPistolEnergy".into(), Recipe { tier : MachineTier::TierTwo, time : 120f64, energy : 3000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter() .collect() }, count_types : 4i64, reagents : vec![("Electrum".into(), 20f64), ("Gold".into(), 10f64), ("Solder".into(), 10f64), ("Steel" .into(), 10f64)] .into_iter().collect() }), ("WeaponRifleEnergy" .into(), Recipe { tier : MachineTier::TierTwo, time : 240f64, energy : 10000f64, temperature : RecipeRange { start : 1f64, stop : 80000f64, is_valid : false }, pressure : RecipeRange { start : 0f64, stop : 1000000f64, is_valid : false }, required_mix : RecipeGasMix { rule : 0i64, is_any : true, is_any_to_remove : false, reagents : vec![] .into_iter().collect() }, count_types : 6i64, reagents : vec![("Constantan".into(), 10f64), ("Electrum".into(), 20f64), ("Gold".into(), 10f64), ("Invar".into(), 10f64), ("Solder".into(), 10f64), ("Steel".into(), 20f64)] .into_iter().collect() }) ] .into_iter() .collect(), }), memory: MemoryInfo { instructions: Some( vec![ ("DeviceSetLock".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | LOCK_STATE | BOOL_8 |\r\n| 16-63 | UNUSED | 48 |" .into(), typ : "PrinterInstruction".into(), value : 6i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "LOCK_STATE".into(), typ : InstructionPartType::Bool8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(48u32) }] .into_iter().collect() }), ("EjectAllReagents".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 8i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }), ("EjectReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-39 | REAGENT_HASH | INT_32 |\r\n| 40-63 | UNUSED | 24 |" .into(), typ : "PrinterInstruction".into(), value : 7i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 39u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((40u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(24u32) }] .into_iter().collect() }), ("ExecuteRecipe".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY | BYTE_8 |\r\n| 16-47 | PREFAB_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 2i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "PREFAB_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("JumpIfNextInvalid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 4i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("JumpToAddress".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | STACK_ADDRESS | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 5i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "STACK_ADDRESS".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("MissingRecipeReagent".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 54 TO 62 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-15 | QUANTITY_CEIL | BYTE_8 |\r\n| 16-47 | REAGENT_HASH | INT_32 |\r\n| 48-63 | UNUSED | 16 |" .into(), typ : "PrinterInstruction".into(), value : 9i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((54u32, Some(62u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 15u32)) }, name : "QUANTITY_CEIL".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((16u32, 47u32)) }, name : "REAGENT_HASH".into(), typ : InstructionPartType::Int32 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((48u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(16u32) }] .into_iter().collect() }), ("StackPointer".into(), Instruction { description : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), description_stripped : "| VALID ONLY AT ADDRESS 63 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-23 | INDEX | USHORT_16 |\r\n| 24-63 | UNUSED | 40 |" .into(), typ : "PrinterInstruction".into(), value : 1i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((63u32, None)) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 23u32)) }, name : "INDEX".into(), typ : InstructionPartType::UShort16 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((24u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(40u32) }] .into_iter().collect() }), ("WaitUntilNextValid".into(), Instruction { description : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), description_stripped : "| VALID ONLY AT ADDRESSES 0 TO 53 |\r\n| 0-7 | OP_CODE | BYTE_8 |\r\n| 8-63 | UNUSED | 56 |" .into(), typ : "PrinterInstruction".into(), value : 3i64, valid : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, Some(53u32))) }, parts : vec![InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((0u32, 7u32)) }, name : "OP_CODE".into(), typ : InstructionPartType::Byte8 }, InstructionPart { range : { trait FromTuple < T >: Sized { fn from_tuple(tuple : T) -> Self; } impl < T > FromTuple < (T, T,) > for [T; 2] { #[inline] fn from_tuple(tuple : (T, T,)) -> Self { [tuple.0, tuple.1] } } impl < T0, T1 > FromTuple < (T0, T1,) > for (T0, T1,) { #[inline] fn from_tuple(tuple : (T0, T1,)) -> Self { tuple } } #[inline] fn convert < T0, T1, Out : FromTuple < (T0, T1,) >> (tuple : (T0, T1,)) -> Out { Out::from_tuple(tuple) } convert((8u32, 63u32)) }, name : "UNUSED".into(), typ : InstructionPartType::Unused(56u32) }] .into_iter().collect() }) ] .into_iter() .collect(), ), memory_access: MemoryAccess::ReadWrite, memory_size: 64u32, }, } .into(), ); map.insert( 1473807953i32, StructureSlotsTemplate { templateType: "StructureSlots".into(), prefab: PrefabInfo { prefab_name: "StructureTorpedoRack".into(), prefab_hash: 1473807953i32, desc: "".into(), name: "Torpedo Rack".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo" .into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo }, SlotInfo { name : "Torpedo".into(), typ : Class::Torpedo } ] .into_iter() .collect(), } .into(), ); map.insert( 1570931620i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTraderWaypoint".into(), prefab_hash: 1570931620i32, desc: "".into(), name: "Trader Waypoint".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1423212473i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformer".into(), prefab_hash: -1423212473i32, desc: "The large Norsec transformer is a critical component of extended electrical networks, controlling the maximum power that will flow down a cable. To prevent overloading, output can be set from 0 to 50,000W. \nNote that transformers operate as data isolators, preventing data flowing into any network beyond it." .into(), name: "Transformer (Large)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1065725831i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerMedium".into(), prefab_hash: -1065725831i32, desc: "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it." .into(), name: "Transformer (Medium)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 833912764i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerMediumReversed".into(), prefab_hash: 833912764i32, desc: "Transformers control the maximum power that will flow down a sub-network of cables, to prevent overloading electrical systems. \nMedium transformers are used in larger setups where more than 5000W is required, with output that can be set to a maximum of 25000W.\nNote that transformers also operate as data isolators, preventing data flowing into any network beyond it." .into(), name: "Transformer Reversed (Medium)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -890946730i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerSmall".into(), prefab_hash: -890946730i32, desc: "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it." .into(), name: "Transformer (Small)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1054059374i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTransformerSmallReversed".into(), prefab_hash: 1054059374i32, desc: "Transformers control the maximum power that will flow down a cable subnetwork, to prevent overloading electrical systems. Output on small transformers can be set from 0 to 5000W.\nNote that transformers operate as data isolators, preventing data flowing into any network beyond it." .into(), name: "Transformer Reversed (Small)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1282191063i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTurbineGenerator".into(), prefab_hash: 1282191063i32, desc: "".into(), name: "Turbine Generator".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PowerGeneration, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1310794736i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureTurboVolumePump".into(), prefab_hash: 1310794736i32, desc: "Shifts 10 times more gas than a basic Volume Pump, with a mode that can be set to flow in either direction." .into(), name: "Turbo Volume Pump (Gas)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Right".into()), (1u32, "Left".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 750118160i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureUnloader".into(), prefab_hash: 750118160i32, desc: "The Xigo Re:Gurge is a handy unit for unloading any items inserted into it, and feeding them into a chute network. For instance, if you add a full Mining Belt, the Re:Gurge will empty a mining belt of its contents, insert them into the chute network, then insert the mining belt itself. A Sorter is recommended to reclaim the mining belt.\n\nOutput = 0 exporting the main item\nOutput = 1 exporting items inside and eventually the main item." .into(), name: "Unloader".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::Output, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Automatic".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1622183451i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureUprightWindTurbine".into(), prefab_hash: 1622183451i32, desc: "Norsec\'s basic wind turbine is an easily fabricated, rapidly deployed design that is strong enough to withstand the worst that environments can throw at it. \nWhile the wind turbine is optimized to produce power even on low atmosphere worlds (up to 200W), it performs best in denser environments. Output varies with wind speed, and during storms, may increase dramatically (up to 800W), so be careful to design your power networks with that in mind." .into(), name: "Upright Wind Turbine".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PowerGeneration, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -692036078i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureValve".into(), prefab_hash: -692036078i32, desc: "".into(), name: "Valve".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -443130773i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureVendingMachine".into(), prefab_hash: -443130773i32, desc: "The Xigo-designed \'Slot Mate\' vending machine allows storage of almost any item, while also operating as a distribution point for working with Traders. You cannot trade without a vending machine, or its more advanced equivalent, the Refrigerated Vending Machine. Each vending machine can hold up to 100 stacks." .into(), name: "Vending Machine".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![] .into_iter().collect()), (1u32, vec![] .into_iter() .collect()), (2u32, vec![] .into_iter().collect()), (3u32, vec![] .into_iter().collect()), (4u32, vec![] .into_iter().collect()), (5u32, vec![] .into_iter().collect()), (6u32, vec![] .into_iter() .collect()), (7u32, vec![] .into_iter().collect()), (8u32, vec![] .into_iter().collect()), (9u32, vec![] .into_iter().collect()), (10u32, vec![] .into_iter().collect()), (11u32, vec![] .into_iter() .collect()), (12u32, vec![] .into_iter().collect()), (13u32, vec![] .into_iter().collect()), (14u32, vec![] .into_iter().collect()), (15u32, vec![] .into_iter().collect()), (16u32, vec![] .into_iter() .collect()), (17u32, vec![] .into_iter().collect()), (18u32, vec![] .into_iter().collect()), (19u32, vec![] .into_iter().collect()), (20u32, vec![] .into_iter().collect()), (21u32, vec![] .into_iter() .collect()), (22u32, vec![] .into_iter().collect()), (23u32, vec![] .into_iter().collect()), (24u32, vec![] .into_iter().collect()), (25u32, vec![] .into_iter().collect()), (26u32, vec![] .into_iter() .collect()), (27u32, vec![] .into_iter().collect()), (28u32, vec![] .into_iter().collect()), (29u32, vec![] .into_iter().collect()), (30u32, vec![] .into_iter().collect()), (31u32, vec![] .into_iter() .collect()), (32u32, vec![] .into_iter().collect()), (33u32, vec![] .into_iter().collect()), (34u32, vec![] .into_iter().collect()), (35u32, vec![] .into_iter().collect()), (36u32, vec![] .into_iter() .collect()), (37u32, vec![] .into_iter().collect()), (38u32, vec![] .into_iter().collect()), (39u32, vec![] .into_iter().collect()), (40u32, vec![] .into_iter().collect()), (41u32, vec![] .into_iter() .collect()), (42u32, vec![] .into_iter().collect()), (43u32, vec![] .into_iter().collect()), (44u32, vec![] .into_iter().collect()), (45u32, vec![] .into_iter().collect()), (46u32, vec![] .into_iter() .collect()), (47u32, vec![] .into_iter().collect()), (48u32, vec![] .into_iter().collect()), (49u32, vec![] .into_iter().collect()), (50u32, vec![] .into_iter().collect()), (51u32, vec![] .into_iter() .collect()), (52u32, vec![] .into_iter().collect()), (53u32, vec![] .into_iter().collect()), (54u32, vec![] .into_iter().collect()), (55u32, vec![] .into_iter().collect()), (56u32, vec![] .into_iter() .collect()), (57u32, vec![] .into_iter().collect()), (58u32, vec![] .into_iter().collect()), (59u32, vec![] .into_iter().collect()), (60u32, vec![] .into_iter().collect()), (61u32, vec![] .into_iter() .collect()), (62u32, vec![] .into_iter().collect()), (63u32, vec![] .into_iter().collect()), (64u32, vec![] .into_iter().collect()), (65u32, vec![] .into_iter().collect()), (66u32, vec![] .into_iter() .collect()), (67u32, vec![] .into_iter().collect()), (68u32, vec![] .into_iter().collect()), (69u32, vec![] .into_iter().collect()), (70u32, vec![] .into_iter().collect()), (71u32, vec![] .into_iter() .collect()), (72u32, vec![] .into_iter().collect()), (73u32, vec![] .into_iter().collect()), (74u32, vec![] .into_iter().collect()), (75u32, vec![] .into_iter().collect()), (76u32, vec![] .into_iter() .collect()), (77u32, vec![] .into_iter().collect()), (78u32, vec![] .into_iter().collect()), (79u32, vec![] .into_iter().collect()), (80u32, vec![] .into_iter().collect()), (81u32, vec![] .into_iter() .collect()), (82u32, vec![] .into_iter().collect()), (83u32, vec![] .into_iter().collect()), (84u32, vec![] .into_iter().collect()), (85u32, vec![] .into_iter().collect()), (86u32, vec![] .into_iter() .collect()), (87u32, vec![] .into_iter().collect()), (88u32, vec![] .into_iter().collect()), (89u32, vec![] .into_iter().collect()), (90u32, vec![] .into_iter().collect()), (91u32, vec![] .into_iter() .collect()), (92u32, vec![] .into_iter().collect()), (93u32, vec![] .into_iter().collect()), (94u32, vec![] .into_iter().collect()), (95u32, vec![] .into_iter().collect()), (96u32, vec![] .into_iter() .collect()), (97u32, vec![] .into_iter().collect()), (98u32, vec![] .into_iter().collect()), (99u32, vec![] .into_iter().collect()), (100u32, vec![] .into_iter().collect()), (101u32, vec![] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Ratio, MemoryAccess::Read), (LogicType::Quantity, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::RequestHash, MemoryAccess::ReadWrite), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ExportCount, MemoryAccess::Read), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Import".into(), typ : Class::None }, SlotInfo { name : "Export".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage" .into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None }, SlotInfo { name : "Storage".into(), typ : Class::None } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -321403609i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureVolumePump".into(), prefab_hash: -321403609i32, desc: "The volume pump pumps pumpable gases. It also separates out pipe networks into separate networks." .into(), name: "Volume Pump".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -858143148i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArch".into(), prefab_hash: -858143148i32, desc: "".into(), name: "Wall (Arch)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1649708822i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchArrow".into(), prefab_hash: 1649708822i32, desc: "".into(), name: "Wall (Arch Arrow)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1794588890i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchCornerRound".into(), prefab_hash: 1794588890i32, desc: "".into(), name: "Wall (Arch Corner Round)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1963016580i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchCornerSquare".into(), prefab_hash: -1963016580i32, desc: "".into(), name: "Wall (Arch Corner Square)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1281911841i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchCornerTriangle".into(), prefab_hash: 1281911841i32, desc: "".into(), name: "Wall (Arch Corner Triangle)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1182510648i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchPlating".into(), prefab_hash: 1182510648i32, desc: "".into(), name: "Wall (Arch Plating)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 782529714i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallArchTwoTone".into(), prefab_hash: 782529714i32, desc: "".into(), name: "Wall (Arch Two Tone)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -739292323i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallCooler".into(), prefab_hash: -739292323i32, desc: "The Xigo Freezy Boi wall cooler complements the wall heater, which can only raise the temperature. The wall cooler functions by drawing heat from the surrounding atmosphere and adding that heat into its pipe network.\nIn order to run the wall cooler properly, you will need to connect pipes to the wall cooler and fill the connected pipe network with any type of gas. The gas\'s heat capacity and volume will determine how fast it reacts to temperature changes.\n\nEFFICIENCY\nThe higher the difference in temperature between the gas stored in the pipes and the room, the less efficient the wall cooler will be. So to keep the wall cooler running at an acceptable efficiency you will need to get rid of the heat that accumulates in the pipes connected to it. A common practice would be to run the pipes to the outside and use radiators on the outside section of the pipes to get rid of the heat.\nThe less efficient the wall cooler, the less power it consumes. It will consume 1010W at max efficiency. The wall cooler can be controlled by logic chips to run when the temperature hits a certain degree.\nERRORS\nIf the wall cooler is flashing an error then it is missing one of the following:\n\n- Pipe connection to the wall cooler.\n- Gas in the connected pipes, or pressure is too low.\n- Atmosphere in the surrounding environment or pressure is too low.\n\nFor more information about how to control temperatures, consult the temperature control Guides page." .into(), name: "Wall Cooler".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Pipe, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1635864154i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlat".into(), prefab_hash: 1635864154i32, desc: "".into(), name: "Wall (Flat)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 898708250i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerRound".into(), prefab_hash: 898708250i32, desc: "".into(), name: "Wall (Flat Corner Round)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 298130111i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerSquare".into(), prefab_hash: 298130111i32, desc: "".into(), name: "Wall (Flat Corner Square)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2097419366i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerTriangle".into(), prefab_hash: 2097419366i32, desc: "".into(), name: "Wall (Flat Corner Triangle)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1161662836i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallFlatCornerTriangleFlat".into(), prefab_hash: -1161662836i32, desc: "".into(), name: "Wall (Flat Corner Triangle Flat)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1979212240i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryCorner".into(), prefab_hash: 1979212240i32, desc: "".into(), name: "Wall (Geometry Corner)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1049735537i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryStreight".into(), prefab_hash: 1049735537i32, desc: "".into(), name: "Wall (Geometry Straight)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1602758612i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryT".into(), prefab_hash: 1602758612i32, desc: "".into(), name: "Wall (Geometry T)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1427845483i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallGeometryTMirrored".into(), prefab_hash: -1427845483i32, desc: "".into(), name: "Wall (Geometry T Mirrored)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 24258244i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallHeater".into(), prefab_hash: 24258244i32, desc: "The Xigo wall heater is a simple device that can be installed on a wall or frame and connected to power. When switched on, it will start heating the surrounding environment. It consumes 1010W of power and can be controlled by logic chips to run when the temperature hits a certain level." .into(), name: "Wall Heater".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1287324802i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron".into(), prefab_hash: 1287324802i32, desc: "".into(), name: "Iron Wall (Type 1)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1485834215i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron02".into(), prefab_hash: 1485834215i32, desc: "".into(), name: "Iron Wall (Type 2)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 798439281i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron03".into(), prefab_hash: 798439281i32, desc: "".into(), name: "Iron Wall (Type 3)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1309433134i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallIron04".into(), prefab_hash: -1309433134i32, desc: "".into(), name: "Iron Wall (Type 4)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1492930217i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallLargePanel".into(), prefab_hash: 1492930217i32, desc: "".into(), name: "Wall (Large Panel)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -776581573i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallLargePanelArrow".into(), prefab_hash: -776581573i32, desc: "".into(), name: "Wall (Large Panel Arrow)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1860064656i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallLight".into(), prefab_hash: -1860064656i32, desc: "".into(), name: "Wall Light".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1306415132i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWallLightBattery".into(), prefab_hash: -1306415132i32, desc: "".into(), name: "Wall Light (Battery)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1590330637i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArch".into(), prefab_hash: 1590330637i32, desc: "".into(), name: "Wall (Padded Arch)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1126688298i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArchCorner".into(), prefab_hash: -1126688298i32, desc: "".into(), name: "Wall (Padded Arch Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1171987947i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArchLightFittingTop".into(), prefab_hash: 1171987947i32, desc: "".into(), name: "Wall (Padded Arch Light Fitting Top)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1546743960i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedArchLightsFittings".into(), prefab_hash: -1546743960i32, desc: "".into(), name: "Wall (Padded Arch Lights Fittings)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -155945899i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedCorner".into(), prefab_hash: -155945899i32, desc: "".into(), name: "Wall (Padded Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1183203913i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedCornerThin".into(), prefab_hash: 1183203913i32, desc: "".into(), name: "Wall (Padded Corner Thin)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 8846501i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedNoBorder".into(), prefab_hash: 8846501i32, desc: "".into(), name: "Wall (Padded No Border)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 179694804i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedNoBorderCorner".into(), prefab_hash: 179694804i32, desc: "".into(), name: "Wall (Padded No Border Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1611559100i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedThinNoBorder".into(), prefab_hash: -1611559100i32, desc: "".into(), name: "Wall (Padded Thin No Border)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1769527556i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedThinNoBorderCorner".into(), prefab_hash: 1769527556i32, desc: "".into(), name: "Wall (Padded Thin No Border Corner)".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2087628940i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedWindow".into(), prefab_hash: 2087628940i32, desc: "".into(), name: "Wall (Padded Window)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -37302931i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddedWindowThin".into(), prefab_hash: -37302931i32, desc: "".into(), name: "Wall (Padded Window Thin)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 635995024i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPadding".into(), prefab_hash: 635995024i32, desc: "".into(), name: "Wall (Padding)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1243329828i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddingArchVent".into(), prefab_hash: -1243329828i32, desc: "".into(), name: "Wall (Padding Arch Vent)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 2024882687i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddingLightFitting".into(), prefab_hash: 2024882687i32, desc: "".into(), name: "Wall (Padding Light Fitting)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1102403554i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPaddingThin".into(), prefab_hash: -1102403554i32, desc: "".into(), name: "Wall (Padding Thin)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 26167457i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallPlating".into(), prefab_hash: 26167457i32, desc: "".into(), name: "Wall (Plating)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 619828719i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsAndHatch".into(), prefab_hash: 619828719i32, desc: "".into(), name: "Wall (Small Panels And Hatch)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -639306697i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsArrow".into(), prefab_hash: -639306697i32, desc: "".into(), name: "Wall (Small Panels Arrow)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 386820253i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsMonoChrome".into(), prefab_hash: 386820253i32, desc: "".into(), name: "Wall (Small Panels Mono Chrome)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1407480603i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsOpen".into(), prefab_hash: -1407480603i32, desc: "".into(), name: "Wall (Small Panels Open)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 1709994581i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallSmallPanelsTwoTone".into(), prefab_hash: 1709994581i32, desc: "".into(), name: "Wall (Small Panels Two Tone)".into(), }, structure: StructureInfo { small_grid: false }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1177469307i32, StructureTemplate { templateType: "Structure".into(), prefab: PrefabInfo { prefab_name: "StructureWallVent".into(), prefab_hash: -1177469307i32, desc: "Used to mix atmospheres passively between two walls.".into(), name: "Wall Vent".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -1178961954i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFiller".into(), prefab_hash: -1178961954i32, desc: "".into(), name: "Water Bottle Filler".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1433754995i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFillerBottom".into(), prefab_hash: 1433754995i32, desc: "".into(), name: "Water Bottle Filler Bottom".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -756587791i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFillerPowered".into(), prefab_hash: -756587791i32, desc: "".into(), name: "Waterbottle Filler".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1986658780i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterBottleFillerPoweredBottom".into(), prefab_hash: 1986658780i32, desc: "".into(), name: "Waterbottle Filler".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()), (1u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Pressure, MemoryAccess::Read), (LogicSlotType::Temperature, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::Volume, MemoryAccess::Read), (LogicSlotType::Open, MemoryAccess::ReadWrite), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter().collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![ SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle }, SlotInfo { name : "Bottle Slot".into(), typ : Class::LiquidBottle } ] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -517628750i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterDigitalValve".into(), prefab_hash: -517628750i32, desc: "".into(), name: "Liquid Digital Valve".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 433184168i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterPipeMeter".into(), prefab_hash: 433184168i32, desc: "".into(), name: "Liquid Pipe Meter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![].into_iter().collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 887383294i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterPurifier".into(), prefab_hash: 887383294i32, desc: "Cleans Polluted Water and outputs Water. The purification process requires Charcoal which can be added to the machine via the import bin. The procesing throughput can be improved by increasing the gas pressure of the input pipe relative to the gas pressure of the output pipe." .into(), name: "Water Purifier".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![(0u32, vec![] .into_iter().collect())] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::ClearMemory, MemoryAccess::Write), (LogicType::ImportCount, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Import".into(), typ : Class::Ore }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Input }, ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::Output }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Chute, role : ConnectionRole::Input } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -1369060582i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWaterWallCooler".into(), prefab_hash: -1369060582i32, desc: "".into(), name: "Liquid Wall Cooler".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::PrefabHash, MemoryAccess::Read), (LogicSlotType::SortingClass, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::Maximum, MemoryAccess::Read), (LogicType::Ratio, MemoryAccess::Read), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "".into(), typ : Class::DataDisk }] .into_iter() .collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::PipeLiquid, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::PowerAndData, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: false, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 1997212478i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWeatherStation".into(), prefab_hash: 1997212478i32, desc: "0.NoStorm\n1.StormIncoming\n2.InStorm".into(), name: "Weather Station".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Mode, MemoryAccess::Read), (LogicType::Error, MemoryAccess::Read), (LogicType::Activate, MemoryAccess::ReadWrite), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::NextWeatherEventTime, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![ (0u32, "NoStorm".into()), (1u32, "StormIncoming".into()), (2u32, "InStorm".into()) ] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: true, has_atmosphere: false, has_color_state: false, has_lock_state: true, has_mode_state: true, has_on_off_state: true, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( -2082355173i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWindTurbine".into(), prefab_hash: -2082355173i32, desc: "The Stationeers wind turbine was first designed by Norsec atmospheric engineers, looking to create a wind-driven power generation system that would operate even on exceedingly low atmosphere worlds. The ultra-light blades respond to exceedingly low atmospheric densities, while being strong enough to function even under huge strain in much more demanding environments.\nWhile the wind turbine is optimized to produce power (up to 500W) even on low atmosphere worlds, it performs best in denser environments. Output varies with wind speed and, during storms, may increase dramatically (up to 10,000W), so be careful to design your power networks with that in mind." .into(), name: "Wind Turbine".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::PowerGeneration, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: false, has_on_off_state: false, has_open_state: false, has_reagents: false, }, } .into(), ); map.insert( 2056377335i32, StructureLogicDeviceTemplate { templateType: "StructureLogicDevice".into(), prefab: PrefabInfo { prefab_name: "StructureWindowShutter".into(), prefab_hash: 2056377335i32, desc: "For those special, private moments, a window that can be closed to prying eyes. \n \nWhen closed, has the heat transfer characteristics of a basic wall. Requires power, and can be connected to logic systems." .into(), name: "Window Shutter".into(), }, structure: StructureInfo { small_grid: true }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![].into_iter().collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Setting, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::RequiredPower, MemoryAccess::Read), (LogicType::Idle, MemoryAccess::Read), (LogicType::PrefabHash, MemoryAccess::Read), (LogicType::ReferenceId, MemoryAccess::Read), (LogicType::NameHash, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Operate".into()), (1u32, "Logic".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![].into_iter().collect(), device: DeviceInfo { connection_list: vec![ ConnectionInfo { typ : ConnectionType::Data, role : ConnectionRole::None }, ConnectionInfo { typ : ConnectionType::Power, role : ConnectionRole::None } ] .into_iter() .collect(), device_pins_length: None, has_activate_state: false, has_atmosphere: false, has_color_state: false, has_lock_state: false, has_mode_state: true, has_on_off_state: true, has_open_state: true, has_reagents: false, }, } .into(), ); map.insert( 1700018136i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ToolPrinterMod".into(), prefab_hash: 1700018136i32, desc: "Apply to an Tool Manufactory with a Welding Torch or Arc Welder to upgrade for increased processing speed and more recipe options." .into(), name: "Tool Printer Mod".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( 94730034i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "ToyLuna".into(), prefab_hash: 94730034i32, desc: "".into(), name: "Toy Luna".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map.insert( -2083426457i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "UniformCommander".into(), prefab_hash: -2083426457i32, desc: "".into(), name: "Uniform Commander".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Uniform, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "Access Card".into(), typ : Class::AccessCard }, SlotInfo { name : "Access Card".into(), typ : Class::AccessCard }, SlotInfo { name : "Credit Card".into(), typ : Class::CreditCard } ] .into_iter() .collect(), } .into(), ); map.insert( -48342840i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "UniformMarine".into(), prefab_hash: -48342840i32, desc: "".into(), name: "Marine Uniform".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Uniform, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "Access Card".into(), typ : Class::AccessCard }, SlotInfo { name : "Credit Card".into(), typ : Class::CreditCard } ] .into_iter() .collect(), } .into(), ); map.insert( 810053150i32, ItemSlotsTemplate { templateType: "ItemSlots".into(), prefab: PrefabInfo { prefab_name: "UniformOrangeJumpSuit".into(), prefab_hash: 810053150i32, desc: "".into(), name: "Jump Suit (Orange)".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Uniform, sorting_class: SortingClass::Clothing, }, thermal_info: None, internal_atmo_info: None, slots: vec![ SlotInfo { name : "".into(), typ : Class::None }, SlotInfo { name : "" .into(), typ : Class::None }, SlotInfo { name : "Access Card".into(), typ : Class::AccessCard }, SlotInfo { name : "Credit Card".into(), typ : Class::CreditCard } ] .into_iter() .collect(), } .into(), ); map.insert( 789494694i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "WeaponEnergy".into(), prefab_hash: 789494694i32, desc: "".into(), name: "Weapon Energy".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: None, transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -385323479i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "WeaponPistolEnergy".into(), prefab_hash: -385323479i32, desc: "0.Stun\n1.Kill".into(), name: "Energy Pistol".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Stun".into()), (1u32, "Kill".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( 1154745374i32, ItemLogicTemplate { templateType: "ItemLogic".into(), prefab: PrefabInfo { prefab_name: "WeaponRifleEnergy".into(), prefab_hash: 1154745374i32, desc: "0.Stun\n1.Kill".into(), name: "Energy Rifle".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::None, sorting_class: SortingClass::Tools, }, thermal_info: None, internal_atmo_info: None, logic: LogicInfo { logic_slot_types: vec![ (0u32, vec![(LogicSlotType::Occupied, MemoryAccess::Read), (LogicSlotType::OccupantHash, MemoryAccess::Read), (LogicSlotType::Quantity, MemoryAccess::Read), (LogicSlotType::Damage, MemoryAccess::Read), (LogicSlotType::Charge, MemoryAccess::Read), (LogicSlotType::ChargeRatio, MemoryAccess::Read), (LogicSlotType::Class, MemoryAccess::Read), (LogicSlotType::MaxQuantity, MemoryAccess::Read), (LogicSlotType::ReferenceId, MemoryAccess::Read)] .into_iter() .collect()) ] .into_iter() .collect(), logic_types: vec![ (LogicType::Power, MemoryAccess::Read), (LogicType::Open, MemoryAccess::ReadWrite), (LogicType::Mode, MemoryAccess::ReadWrite), (LogicType::Error, MemoryAccess::Read), (LogicType::Lock, MemoryAccess::ReadWrite), (LogicType::On, MemoryAccess::ReadWrite), (LogicType::ReferenceId, MemoryAccess::Read) ] .into_iter() .collect(), modes: Some( vec![(0u32, "Stun".into()), (1u32, "Kill".into())] .into_iter() .collect(), ), transmission_receiver: false, wireless_logic: false, circuit_holder: false, }, slots: vec![SlotInfo { name : "Battery".into(), typ : Class::Battery }] .into_iter() .collect(), } .into(), ); map.insert( -1102977898i32, ItemTemplate { templateType: "Item".into(), prefab: PrefabInfo { prefab_name: "WeaponTorpedo".into(), prefab_hash: -1102977898i32, desc: "".into(), name: "Torpedo".into(), }, item: ItemInfo { consumable: false, filter_type: None, ingredient: false, max_quantity: 1u32, reagents: None, slot_class: Class::Torpedo, sorting_class: SortingClass::Default, }, thermal_info: None, internal_atmo_info: None, } .into(), ); map }