From 1f85c3ae41625aa3ebecaf1ca3ea76477cd7e50e Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Sat, 21 Dec 2024 15:28:31 -0500 Subject: [PATCH 01/20] Fix Emergency Lights (#2596) * Emergency lights: MapInit func, SetLevel checks * fix color on mapinit func --- Content.Server/AlertLevel/AlertLevelSystem.cs | 8 ++++---- .../EntitySystems/EmergencyLightSystem.cs | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Content.Server/AlertLevel/AlertLevelSystem.cs b/Content.Server/AlertLevel/AlertLevelSystem.cs index 8e43bf6a715..71ad018603a 100644 --- a/Content.Server/AlertLevel/AlertLevelSystem.cs +++ b/Content.Server/AlertLevel/AlertLevelSystem.cs @@ -172,8 +172,7 @@ public void SetLevel(EntityUid station, string level, bool playSound, bool annou return; // End Frontier - if (!Resolve(station, ref dataComponent) // Frontier: remove component - || component.AlertLevels == null + if (component.AlertLevels == null // Frontier: remove component, resolve station to data component later || !component.AlertLevels.Levels.TryGetValue(level, out var detail) || component.CurrentLevel == level) { @@ -196,7 +195,7 @@ public void SetLevel(EntityUid station, string level, bool playSound, bool annou component.CurrentLevel = level; component.IsLevelLocked = locked; - var stationName = dataComponent.EntityName; + //var stationName = dataComponent.EntityName; // Frontier: remove station name var name = level.ToLower(); @@ -232,8 +231,9 @@ public void SetLevel(EntityUid station, string level, bool playSound, bool annou } } - if (announce) + if (announce && Resolve(station, ref dataComponent)) // Frontier: add Resolve for dataComponent { + var stationName = dataComponent.EntityName; // Frontier: moved down _chatSystem.DispatchStationAnnouncement(station, announcementFull, playDefaultSound: playDefault, colorOverride: detail.Color, sender: stationName); } diff --git a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs index 9f820bdf701..633a027ef8f 100644 --- a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs +++ b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs @@ -32,6 +32,8 @@ public override void Initialize() SubscribeLocalEvent(OnAlertLevelChanged); SubscribeLocalEvent(OnEmergencyExamine); SubscribeLocalEvent(OnEmergencyPower); + + SubscribeLocalEvent(OnMapInit); // Frontier } private void OnEmergencyPower(Entity entity, ref PowerChangedEvent args) @@ -245,4 +247,21 @@ private void TurnOn(Entity entity, Color color) _appearance.SetData(entity.Owner, EmergencyLightVisuals.On, true); _ambient.SetAmbience(entity.Owner, true); } + + // Frontier: ensure the lights are accurate to the station + private void OnMapInit(Entity entity, ref MapInitEvent ev) + { + if (!TryComp(_sectorService.GetServiceEntity(), out var alert)) + return; + + if (alert.AlertLevels == null || !alert.AlertLevels.Levels.TryGetValue(alert.CurrentLevel, out var details)) + return; + + entity.Comp.ForciblyEnabled = details.ForceEnableEmergencyLights; + if (details.ForceEnableEmergencyLights) + TurnOn(entity, details.EmergencyLightColor); + else + TurnOff(entity, details.EmergencyLightColor); + } + // End Frontier } From 56be5785a8d3c6846caf8c65f562402c736fe7c0 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Sat, 21 Dec 2024 20:28:54 +0000 Subject: [PATCH 02/20] Automatic Changelog (#2596) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index fa4e36c83cc..eea79ac399f 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -6041,3 +6041,9 @@ Entries: message: Alert levels are now sector-wide, with appropriate announcements. id: 5604 time: '2024-12-21T01:12:26.0000000+00:00' +- author: whatston3 + changes: + - type: Fix + message: Emergency lights start in their appropriate state when built. + id: 5605 + time: '2024-12-21T20:28:31.0000000+00:00' From 17a8b847e039a1c7da9fad900fe4f9928910217c Mon Sep 17 00:00:00 2001 From: dustylens <54123313+dustylens@users.noreply.github.com> Date: Sat, 21 Dec 2024 23:05:32 +0000 Subject: [PATCH 03/20] Largely removes chem crates from the trade system. (#2453) * Reduces chem stock availability to elements that cannot be otherwise sourced. Removes chem crate restocks from the trade station as per directive from people who hide in the shadows. Maintains a restock crate of chemicals that either lack a proper source or can only be sourced in trace amounts by current methods. Re-examine when those sources are more commonly available. * abstract reasoning * I Zinc I messed up. * Price change and description butchering. * Adds nitrogen. Seems reasonable given the lack of condensers. Might need to be examined later. * Update cargo_medical.yml * Update chemistry.yml * Update cargo_medical.yml --------- Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com> --- Resources/Prototypes/Catalog/Cargo/cargo_medical.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml b/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml index 9475f346ba4..bcdb0e417dc 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml @@ -130,6 +130,7 @@ - type: cargoProduct id: ChemistryP + abstract: true # Frontier icon: sprite: Structures/Storage/Crates/chemcrate_secure.rsi state: icon @@ -140,6 +141,7 @@ - type: cargoProduct id: ChemistryS + abstract: true # Frontier icon: sprite: Structures/Storage/Crates/chemcrate_secure.rsi state: icon @@ -150,6 +152,7 @@ - type: cargoProduct id: CrateChemistryD + abstract: true # Frontier icon: sprite: Structures/Storage/Crates/chemcrate_secure.rsi state: icon From 0a8c74af03e3a4c8b12127df7b055dca34f40ffd Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Sat, 21 Dec 2024 23:05:57 +0000 Subject: [PATCH 04/20] Automatic Changelog (#2453) --- Resources/Changelog/Frontier.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index eea79ac399f..78d52496b28 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -6047,3 +6047,11 @@ Entries: message: Emergency lights start in their appropriate state when built. id: 5605 time: '2024-12-21T20:28:31.0000000+00:00' +- author: dustylens + changes: + - type: Remove + message: >- + majority of chemistry jugs removed from sale, to be replaced with new + barrels. + id: 5606 + time: '2024-12-21T23:05:32.0000000+00:00' From d198d11a835b326fc8c9911278abb7d7fe046a54 Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Sun, 22 Dec 2024 01:06:10 +0200 Subject: [PATCH 05/20] Barrels (#1776) * initial commit * fix congraph * one pixel annoying me * new keg * further refinement of sprites * fix perspective * fix yml a bit * basic sprites, un-mussied * explodey time * Update barrel.yml * im stupiod * Update barrel.yml * Update barrel.yml * chemicals * better sprites * no suffixes * no suffixes * Update salvage.yml * Update barrel.yml * Update barrel.yml * Update barrel.yml * Kegs * Cleanup * Update cargo_medical.yml * Update barrel.yml * Update cargo_food.yml * Cleanup * Cleanup * Update barrel.yml * Price * Update barrel.yml * Update cargo_medical.yml * No used for refill, ever * sprite * Update barrel.yml * Cleanup * Yep * Sprites, white, black barrels, cargo entries * it's called o2 because there's two of them * Barrel spawner, service-ish barrels * white/black sprite touchups, paper labels & fixes * Booze barrels, barrel spawners * Oliveoil, not OliveOil * Open option * Up all the prices nothing final but should be good for first merge * ChefVend: reduce oil jug count, 1 of each * mayo is a condiment, not an oil * realphabetize reagent labels * reorder empty barrel * Removed chemicals from cargo * SpaceCleaner * Update dungeon_items_kitchen.yml * Update migration.yml --------- Co-authored-by: rosieposie Co-authored-by: ErhardSteinhauer <65374927+ErhardSteinhauer@users.noreply.github.com> Co-authored-by: Whatstone Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com> --- .../Locale/en-US/_NF/reagents/labels.ftl | 49 + .../Prototypes/Catalog/Cargo/cargo_food.yml | 19 +- .../VendingMachines/Inventories/chefvend.yml | 8 +- .../_NF/Catalog/Cargo/cargo_medical.yml | 299 ++++ .../_NF/Catalog/Cargo/cargo_service.yml | 10 +- .../_NF/Catalog/Fills/Crates/chemistry.yml | 10 - .../Spawners/Random/dungeon_items_kitchen.yml | 1 - .../Markers/Spawners/Random/salvage.yml | 123 +- .../Objects/Consumable/Food/ingredients.yml | 30 - .../Objects/Specific/chemical-containers.yml | 15 - .../Structures/Storage/Crates/barrel.yml | 1326 +++++++++++++++++ .../_NF/Entities/World/Debris/wrecks.yml | 12 +- .../_NF/Recipes/Crafting/Graphs/barrel.yml | 26 + .../_NF/Recipes/Crafting/barrel.yml | 12 + .../Storage/Barrels/black.rsi/icon.png | Bin 0 -> 649 bytes .../Storage/Barrels/black.rsi/icon_open.png | Bin 0 -> 373 bytes .../Storage/Barrels/black.rsi/meta.json | 23 + .../black.rsi/metal_explosive_label.png | Bin 0 -> 368 bytes .../Storage/Barrels/black.rsi/paper.png | Bin 0 -> 296 bytes .../Objects/Storage/Barrels/blue.rsi/icon.png | Bin 0 -> 777 bytes .../Storage/Barrels/blue.rsi/icon_open.png | Bin 0 -> 373 bytes .../Storage/Barrels/blue.rsi/meta.json | 23 + .../blue.rsi/metal_explosive_label.png | Bin 0 -> 368 bytes .../Storage/Barrels/blue.rsi/paper.png | Bin 0 -> 296 bytes .../Storage/Barrels/green.rsi/icon.png | Bin 0 -> 787 bytes .../Storage/Barrels/green.rsi/icon_open.png | Bin 0 -> 373 bytes .../Storage/Barrels/green.rsi/meta.json | 23 + .../green.rsi/metal_explosive_label.png | Bin 0 -> 368 bytes .../Storage/Barrels/green.rsi/paper.png | Bin 0 -> 296 bytes .../Objects/Storage/Barrels/grey.rsi/icon.png | Bin 0 -> 781 bytes .../Storage/Barrels/grey.rsi/icon_open.png | Bin 0 -> 373 bytes .../Storage/Barrels/grey.rsi/meta.json | 23 + .../grey.rsi/metal_explosive_label.png | Bin 0 -> 368 bytes .../Storage/Barrels/grey.rsi/paper.png | Bin 0 -> 296 bytes .../Objects/Storage/Barrels/red.rsi/icon.png | Bin 0 -> 759 bytes .../Storage/Barrels/red.rsi/icon_open.png | Bin 0 -> 373 bytes .../Objects/Storage/Barrels/red.rsi/meta.json | 23 + .../Barrels/red.rsi/metal_explosive_label.png | Bin 0 -> 368 bytes .../Objects/Storage/Barrels/red.rsi/paper.png | Bin 0 -> 296 bytes .../Storage/Barrels/white.rsi/icon.png | Bin 0 -> 351 bytes .../Storage/Barrels/white.rsi/icon_open.png | Bin 0 -> 373 bytes .../Storage/Barrels/white.rsi/meta.json | 23 + .../white.rsi/metal_explosive_label.png | Bin 0 -> 368 bytes .../Storage/Barrels/white.rsi/paper.png | Bin 0 -> 296 bytes .../Storage/Barrels/wood.rsi/closed.png | Bin 0 -> 339 bytes .../Objects/Storage/Barrels/wood.rsi/icon.png | Bin 0 -> 1138 bytes .../Storage/Barrels/wood.rsi/meta.json | 20 + .../Objects/Storage/Barrels/wood.rsi/open.png | Bin 0 -> 1138 bytes .../Storage/Barrels/yellow.rsi/icon.png | Bin 0 -> 787 bytes .../Storage/Barrels/yellow.rsi/icon_open.png | Bin 0 -> 373 bytes .../Storage/Barrels/yellow.rsi/meta.json | 23 + .../yellow.rsi/metal_explosive_label.png | Bin 0 -> 368 bytes .../Storage/Barrels/yellow.rsi/paper.png | Bin 0 -> 296 bytes Resources/_NF/migration.yml | 5 +- 54 files changed, 2039 insertions(+), 87 deletions(-) create mode 100644 Resources/Locale/en-US/_NF/reagents/labels.ftl delete mode 100644 Resources/Prototypes/_NF/Catalog/Fills/Crates/chemistry.yml create mode 100644 Resources/Prototypes/_NF/Entities/Structures/Storage/Crates/barrel.yml create mode 100644 Resources/Prototypes/_NF/Recipes/Crafting/Graphs/barrel.yml create mode 100644 Resources/Prototypes/_NF/Recipes/Crafting/barrel.yml create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/icon.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/icon_open.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/meta.json create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/metal_explosive_label.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/paper.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/blue.rsi/icon.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/blue.rsi/icon_open.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/blue.rsi/meta.json create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/blue.rsi/metal_explosive_label.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/blue.rsi/paper.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/green.rsi/icon.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/green.rsi/icon_open.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/green.rsi/meta.json create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/green.rsi/metal_explosive_label.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/green.rsi/paper.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/grey.rsi/icon.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/grey.rsi/icon_open.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/grey.rsi/meta.json create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/grey.rsi/metal_explosive_label.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/grey.rsi/paper.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/red.rsi/icon.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/red.rsi/icon_open.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/red.rsi/meta.json create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/red.rsi/metal_explosive_label.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/red.rsi/paper.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/white.rsi/icon.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/white.rsi/icon_open.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/white.rsi/meta.json create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/white.rsi/metal_explosive_label.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/white.rsi/paper.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/closed.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/icon.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/meta.json create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/open.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/icon.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/icon_open.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/meta.json create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/metal_explosive_label.png create mode 100644 Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/paper.png diff --git a/Resources/Locale/en-US/_NF/reagents/labels.ftl b/Resources/Locale/en-US/_NF/reagents/labels.ftl new file mode 100644 index 00000000000..981cbabf836 --- /dev/null +++ b/Resources/Locale/en-US/_NF/reagents/labels.ftl @@ -0,0 +1,49 @@ +# Labels for reagent barrels +# Elements & basic reagents +reagent-label-aluminium = [bold]Aluminium[/bold] +reagent-label-carbon = [bold]Carbon[/bold] +reagent-label-chlorine = [bold]Chlorine[/bold] +reagent-label-copper = [bold]Copper[/bold] +reagent-label-ethanol = [bold]Ethanol[/bold] +reagent-label-fluorine = [bold]Fluorine[/bold] +reagent-label-gold = [bold]Gold[/bold] +reagent-label-hydrogen = [bold]Hydrogen[/bold] +reagent-label-iodine = [bold]Iodine[/bold] +reagent-label-iron = [bold]Iron[/bold] +reagent-label-lithium = [bold]Lithium[/bold] +reagent-label-mercury = [bold]Mercury[/bold] +reagent-label-nitrogen = [bold]Nitrogen[/bold] +reagent-label-oxygen = [bold]Oxygen[/bold] +reagent-label-phosphorus = [bold]Phosphorus[/bold] +reagent-label-potassium = [bold]Potassium[/bold] +reagent-label-radium = [bold]Radium[/bold] +reagent-label-silicon = [bold]Silicon[/bold] +reagent-label-silver = [bold]Silver[/bold] +reagent-label-sodium = [bold]Sodium[/bold] +reagent-label-sugar = [bold]Sugar[/bold] +reagent-label-sulfur = [bold]Sulfur[/bold] +# Service & other reagents +reagent-label-cornoil = [bold]Corn Oil[/bold] +reagent-label-diethylamine = [bold]Diethylamine[/bold] +reagent-label-ketchup = [bold]Ketchup[/bold] +reagent-label-mayo = [bold]Mayonnaise[/bold] +reagent-label-mustard = [bold]Mustard[/bold] +reagent-label-oil = [bold]Oil[/bold] +reagent-label-oil-olive = [bold]Olive Oil[/bold] +reagent-label-space-cleaner = [bold]Space Cleaner[/bold] +reagent-label-space-lube = [bold]Space Lube[/bold] +reagent-label-welding-fuel = [bold]Welding Fuel[/bold] +# Drinks +reagent-label-absinthe = [bold]Absinthe[/bold] +reagent-label-ale = [bold]Ale[/bold] +reagent-label-beer = [bold]Beer[/bold] +reagent-label-coffeeliqueur = [bold]Coffee Liqueur[/bold] +reagent-label-cognac = [bold]Cognac[/bold] +reagent-label-gin = [bold]Gin[/bold] +reagent-label-rum = [bold]Rum[/bold] +reagent-label-tequila = [bold]Tequila[/bold] +reagent-label-vermouth = [bold]Vermouth[/bold] +reagent-label-vodka = [bold]Vodka[/bold] +reagent-label-water = [bold]Water[/bold] +reagent-label-whiskey = [bold]Whiskey[/bold] +reagent-label-wine = [bold]Wine[/bold] diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_food.yml b/Resources/Prototypes/Catalog/Cargo/cargo_food.yml index e1c67ee941c..280d386c87a 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_food.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_food.yml @@ -75,12 +75,13 @@ category: cargoproduct-category-name-food group: market -# - type: cargoProduct - # id: FoodSoftdrinksLarge - # icon: - # sprite: Objects/Consumable/Drinks/colabottle.rsi - # state: icon - # product: CrateFoodSoftdrinksLarge - # cost: 2400 - # category: cargoproduct-category-name-food - # group: market +- type: cargoProduct + id: FoodSoftdrinksLarge + abstract: true # Frontier + icon: + sprite: Objects/Consumable/Drinks/colabottle.rsi + state: icon + product: CrateFoodSoftdrinksLarge + cost: 2400 + category: cargoproduct-category-name-food + group: market diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefvend.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefvend.yml index b5eb2c20dc6..7a1d8763ce2 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefvend.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chefvend.yml @@ -10,18 +10,16 @@ # FoodCondimentPacketSalt: 4 # Frontier - Replaced with big salt ReagentContainerSalt: 5 # Frontier ReagentContainerPepper: 5 # Frontier - DrinkKegPlasticKetchup: 1 # Frontier - Refills - DrinkKegPlasticMustard: 1 # Frontier - Refills FoodCondimentBottleEnzyme: 5 # Frontier 2<5 FoodCondimentBottleHotsauce: 2 FoodCondimentBottleKetchup: 2 FoodCondimentBottleBBQ: 2 FoodCondimentBottleVinegar: 5 # Frontier 2<5 # ReagentContainerOliveoil: 2 # Frontier - Replaced with OilJarOlive - OilJarOlive: 3 - OilJarCorn: 3 - OilJarGhee: 3 ReagentContainerMayo: 2 + OilJarOlive: 1 # Frontier + OilJarCorn: 1 # Frontier + OilJarGhee: 1 # Frontier #VariantCubeBox: 3 # Frontier MonkeyCubeBox: 2 # Frontier KoboldCubeBox: 2 # Frontier diff --git a/Resources/Prototypes/_NF/Catalog/Cargo/cargo_medical.yml b/Resources/Prototypes/_NF/Catalog/Cargo/cargo_medical.yml index 8b4eb3385d1..98b52d524af 100644 --- a/Resources/Prototypes/_NF/Catalog/Cargo/cargo_medical.yml +++ b/Resources/Prototypes/_NF/Catalog/Cargo/cargo_medical.yml @@ -7,3 +7,302 @@ cost: 3000 category: cargoproduct-category-name-medical group: market + +- type: cargoProduct + id: CargoBarrel + name: barrel (empty) + icon: + sprite: _NF/Objects/Storage/Barrels/white.rsi + state: icon + product: MetalBarrelWhite + cost: 2000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelCarbon + name: barrel of carbon + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/black.rsi + state: icon + product: ChemicalBarrelCarbon + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelIodine + name: barrel of iodine + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/red.rsi + state: icon + product: ChemicalBarrelIodine + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelFluorine + name: barrel of fluorine +# abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/blue.rsi + state: icon + product: ChemicalBarrelFluorine + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelChlorine + name: barrel of chlorine + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/green.rsi + state: icon + product: ChemicalBarrelChlorine + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelAluminium + name: barrel of aluminium +# abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/white.rsi + state: icon + product: ChemicalBarrelAluminium + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelPhosphorus + name: barrel of phosphorus +# abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/red.rsi + state: icon + product: ChemicalBarrelPhosphorus + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelSulfur + name: barrel of sulfur + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/yellow.rsi + state: icon + product: ChemicalBarrelSulfur + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelSilicon + name: barrel of silicon + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/black.rsi + state: icon + product: ChemicalBarrelSilicon + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelHydrogen + name: barrel of hydrogen + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/white.rsi + state: icon + product: ChemicalBarrelHydrogen + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelLithium + name: barrel of lithium +# abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/grey.rsi + state: icon + product: ChemicalBarrelLithium + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelSodium + name: barrel of sodium + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/grey.rsi + state: icon + product: ChemicalBarrelSodium + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelPotassium + name: barrel of potassium + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/yellow.rsi + state: icon + product: ChemicalBarrelPotassium + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelRadium + name: barrel of radium +# abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/green.rsi + state: icon + product: ChemicalBarrelRadium + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelIron + name: barrel of iron + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/grey.rsi + state: icon + product: ChemicalBarrelIron + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelCopper + name: barrel of copper +# abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/red.rsi + state: icon + product: ChemicalBarrelCopper + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelGold + name: barrel of gold + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/yellow.rsi + state: icon + product: ChemicalBarrelGold + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelMercury + name: barrel of mercury +# abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/grey.rsi + state: icon + product: ChemicalBarrelMercury + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelSilver + name: barrel of silver + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/white.rsi + state: icon + product: ChemicalBarrelSilver + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelEthanol + name: barrel of ethanol +# abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/blue.rsi + state: icon + product: ChemicalBarrelEthanol + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelSugar + name: barrel of sugar + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/white.rsi + state: icon + product: ChemicalBarrelSugar + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelNitrogen + name: barrel of nitrogen +# abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/red.rsi + state: icon + product: ChemicalBarrelNitrogen + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelOxygen + name: barrel of oxygen + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/blue.rsi + state: icon + product: ChemicalBarrelOxygen + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelOil + name: barrel of oil + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/black.rsi + state: icon + product: ChemicalBarrelOil + cost: 5000 + category: cargoproduct-category-name-medical + group: market + +- type: cargoProduct + id: CargoBarrelDiethylamine + name: barrel of diethylamine + abstract: true + icon: + sprite: _NF/Objects/Storage/Barrels/green.rsi + state: icon + product: ChemicalBarrelDiethylamine + cost: 5000 + category: cargoproduct-category-name-medical + group: market diff --git a/Resources/Prototypes/_NF/Catalog/Cargo/cargo_service.yml b/Resources/Prototypes/_NF/Catalog/Cargo/cargo_service.yml index 206d951c793..2a9b0df5e60 100644 --- a/Resources/Prototypes/_NF/Catalog/Cargo/cargo_service.yml +++ b/Resources/Prototypes/_NF/Catalog/Cargo/cargo_service.yml @@ -1,10 +1,10 @@ - type: cargoProduct - id: BulkSpaceCleaner + id: CargoBarreSpaceCleaner icon: - sprite: Objects/Specific/Chemistry/jug.rsi - state: jug - product: CrateSpaceCleaner - cost: 2000 + sprite: _NF/Objects/Storage/Barrels/blue.rsi + state: icon + product: ChemicalBarrelSpaceCleaner + cost: 3500 category: cargoproduct-category-name-service group: market diff --git a/Resources/Prototypes/_NF/Catalog/Fills/Crates/chemistry.yml b/Resources/Prototypes/_NF/Catalog/Fills/Crates/chemistry.yml deleted file mode 100644 index 18dee491c22..00000000000 --- a/Resources/Prototypes/_NF/Catalog/Fills/Crates/chemistry.yml +++ /dev/null @@ -1,10 +0,0 @@ -- type: entity - id: CrateSpaceCleaner - parent: CrateGenericSteel - name: bulk space cleaner crate - description: For a large mess. - components: - - type: StorageFill - contents: - - id: JugSpaceCleaner - amount: 5 diff --git a/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_kitchen.yml b/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_kitchen.yml index db2775f1a85..9da9c833bfc 100644 --- a/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_kitchen.yml +++ b/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/dungeon_items_kitchen.yml @@ -225,7 +225,6 @@ - CrateMousetrapBoxes - CrateFoodBarSupply - CrateServiceBoozeDispenser - - CrateSpaceCleaner - CrateServiceKitCleanades chance: 0.9 offset: 0.0 diff --git a/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/salvage.yml b/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/salvage.yml index ce6a811dda9..6705e794405 100644 --- a/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/salvage.yml +++ b/Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/salvage.yml @@ -350,8 +350,9 @@ - type: entity name: salvage tank spawner - id: SalvageTankSpawner + id: SalvageTankSpawnerHighCapacity parent: MarkerBase + suffix: High Capacity, 95% components: - type: Sprite layers: @@ -360,15 +361,9 @@ state: fueltank - type: RandomSpawner prototypes: - - WaterTankFull - - WeldingFuelTankFull -# - WaterCooler - chance: 0.95 - rarePrototypes: - - WeldingFuelTankHighCapacity +# - WeldingFuelTankHighCapacity - WaterTankHighCapacity - rareChance: 0.05 - offset: 0.0 + chance: 0.95 - type: entity name: salvage locker spawner @@ -596,3 +591,113 @@ # - SpawnMobPurpleSnake # Why are they xeno rareChance: 0.2 offset: 0.0 + +- type: entity + id: NFSalvageChemicalBarrelSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: _NF/Objects/Storage/Barrels/grey.rsi + state: icon + - type: RandomSpawner + prototypes: # Filled versions + - ChemicalBarrelCarbon + - ChemicalBarrelIodine + - ChemicalBarrelFluorine + - ChemicalBarrelChlorine + - ChemicalBarrelAluminium + - ChemicalBarrelPhosphorus + - ChemicalBarrelSulfur + - ChemicalBarrelSilicon + - ChemicalBarrelHydrogen + - ChemicalBarrelLithium + - ChemicalBarrelSodium + - ChemicalBarrelPotassium + - ChemicalBarrelRadium + - ChemicalBarrelIron + - ChemicalBarrelCopper + - ChemicalBarrelGold + - ChemicalBarrelMercury + - ChemicalBarrelSilver + - ChemicalBarrelEthanol + - ChemicalBarrelSugar + - ChemicalBarrelNitrogen + - ChemicalBarrelOxygen + chance: 0.95 + offset: 0.1 # Little offset, it's free-standing + +- type: entity + id: NFSalvageServiceBarrelSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: _NF/Objects/Storage/Barrels/grey.rsi + state: icon + - type: RandomSpawner + prototypes: # Filled versions + - ChemicalBarrelOil + - ChemicalBarrelDiethylamine + - ChemicalBarrelMustard + - ChemicalBarrelKetchup + - ChemicalBarrelMayo + - ChemicalBarrelCornoil + - ChemicalBarrelOliveoil + - ChemicalBarrelSpaceLube + - ChemicalBarrelSpaceCleaner + chance: 0.95 + offset: 0.1 # Little offset, it's free-standing + +- type: entity + id: NFSalvageDrinkableBarrelSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: _NF/Objects/Storage/Barrels/red.rsi + state: icon + - type: RandomSpawner + prototypes: # Filled versions + - ChemicalBarrelWater + rarePrototypes: + - ChemicalBarrelAbsinthe + - ChemicalBarrelAle + - ChemicalBarrelBeer + - ChemicalBarrelCoffeeLiqueur + - ChemicalBarrelCognac + - ChemicalBarrelGin + - ChemicalBarrelMead + - ChemicalBarrelRum + - ChemicalBarrelTequila + - ChemicalBarrelVermouth + - ChemicalBarrelVodka + - ChemicalBarrelWhiskey + - ChemicalBarrelWine + rareChance: 0.5 + chance: 0.95 + offset: 0.1 # Little offset, it's free-standing + +- type: entity + id: NFSalvageEmptyBarrelSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - sprite: _NF/Objects/Storage/Barrels/red.rsi + state: icon + - type: RandomSpawner + prototypes: + - MetalBarrelGrey + - MetalBarrelBlue + - MetalBarrelRed + - MetalBarrelYellow + - MetalBarrelGreen + - MetalBarrelWhite + - MetalBarrelBlack + - ChemicalBarrelExplosiveEmpty + offset: 0.1 # Little offset, it's free-standing diff --git a/Resources/Prototypes/_NF/Entities/Objects/Consumable/Food/ingredients.yml b/Resources/Prototypes/_NF/Entities/Objects/Consumable/Food/ingredients.yml index 62da2be141d..0703cc52627 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Consumable/Food/ingredients.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Consumable/Food/ingredients.yml @@ -75,36 +75,6 @@ - ReagentId: CocoaPowder Quantity: 50 -- type: entity - parent: DrinkKegPlastic - id: DrinkKegPlasticKetchup - name: ketchup keg - components: - - type: SolutionContainerManager - solutions: - drink: - maxVol: 600 - reagents: - - ReagentId: Ketchup - Quantity: 600 - - type: StaticPrice - price: 60 - -- type: entity - parent: DrinkKegPlastic - id: DrinkKegPlasticMustard - name: mustard keg - components: - - type: SolutionContainerManager - solutions: - drink: - maxVol: 600 - reagents: - - ReagentId: Mustard - Quantity: 600 - - type: StaticPrice - price: 60 - - type: entity name: raw coffee beans parent: FoodProduceBase diff --git a/Resources/Prototypes/_NF/Entities/Objects/Specific/chemical-containers.yml b/Resources/Prototypes/_NF/Entities/Objects/Specific/chemical-containers.yml index bcd319f1ce5..7bb29f92987 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Specific/chemical-containers.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Specific/chemical-containers.yml @@ -1,18 +1,3 @@ -- type: entity - parent: Jug - id: JugSpaceCleaner - suffix: space cleaner - categories: [ HideSpawnMenu ] - components: - - type: Label - currentLabel: reagent-name-space-cleaner - - type: SolutionContainerManager - solutions: - beaker: - reagents: - - ReagentId: SpaceCleaner - Quantity: 200 - - type: entity name: bluespace jug parent: Jug diff --git a/Resources/Prototypes/_NF/Entities/Structures/Storage/Crates/barrel.yml b/Resources/Prototypes/_NF/Entities/Structures/Storage/Crates/barrel.yml new file mode 100644 index 00000000000..1b568262482 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Structures/Storage/Crates/barrel.yml @@ -0,0 +1,1326 @@ +- type: entity + parent: CrateGeneric + id: WoodenBarrel + name: wooden barrel + description: A musty old wooden barrel. + components: + - type: Sprite + sprite: _NF/Objects/Storage/Barrels/wood.rsi + layers: + - state: icon + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: ["enum.StorageVisualLayers.Door"] + - type: Icon + sprite: _NF/Objects/Storage/Barrels/wood.rsi + state: icon + - type: Damageable + damageContainer: StructuralInorganic + damageModifierSet: Wood + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 30 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank1: + min: 1 + max: 4 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Construction + graph: WoodenBarrel + node: woodenbarrel + containers: + - entity_storage + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.4" + density: 150 + mask: + - SmallMobMask #this is so they can go under plastic flaps + layer: + - MachineLayer + - type: Climbable + - type: StaticPrice + price: 50 + +- type: entity + parent: StorageTank + id: BaseBarrel + name: metal barrel + description: A metal barrel. It can be filled with liquid. + abstract: true + components: + - type: Sprite + sprite: _NF/Objects/Storage/Barrels/grey.rsi + layers: + - state: icon + - state: icon_open + map: ["enum.OpenableVisuals.Layer"] + visible: false + - state: paper + map: ["enum.PaperLabelVisuals.Layer"] + visible: false + - type: SolutionContainerManager + solutions: + tank: + maxVol: 1000 + - type: ExaminableSolution + solution: tank + - type: UserInterface + interfaces: + enum.TransferAmountUiKey.Key: + type: TransferAmountBoundUserInterface + - type: DrawableSolution + solution: tank + - type: InjectableSolution + solution: tank + - type: Spillable + solution: tank + spillDelay: 10 + - type: DumpableSolution + solution: tank + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.4" + density: 200 + mask: + - SmallMobMask #this is so they can go under plastic flaps + layer: + - MachineLayer + - type: Transform + noRot: false + - type: Damageable + damageContainer: StructuralInorganic + damageModifierSet: Metallic + - type: GenericVisualizer + visuals: + enum.OpenableVisuals.Opened: + enum.OpenableVisuals.Layer: + True: { visible: true } + False: { visible: false } + enum.PaperLabelVisuals.HasLabel: + enum.PaperLabelVisuals.Layer: + True: { visible: true } + False: { visible: false } + enum.PaperLabelVisuals.LabelType: + enum.PaperLabelVisuals.Layer: + Paper: { state: paper } + Bounty: { state: paper } + CaptainsPaper: { state: paper } + Invoice: { state: paper } + - type: Appearance + - type: PaperLabel + labelSlot: + insertVerbText: Attach Label + ejectVerbText: Remove Label + whitelist: + components: + - Paper + - type: ItemSlots + - type: ContainerContainer + containers: + paper_label: !type:ContainerSlot + - type: Openable + sound: + collection: valveSqueak + closeable: true + closeSound: + collection: valveSqueak + - type: Sealable + - type: StaticPrice + price: 1000 + +- type: entity + id: MetalBarrelGrey + parent: BaseBarrel + components: + - type: Sprite + sprite: _NF/Objects/Storage/Barrels/grey.rsi + +- type: entity + id: MetalBarrelBlue + parent: BaseBarrel + components: + - type: Sprite + sprite: _NF/Objects/Storage/Barrels/blue.rsi + +- type: entity + id: MetalBarrelRed + parent: BaseBarrel + components: + - type: Sprite + sprite: _NF/Objects/Storage/Barrels/red.rsi + +- type: entity + id: MetalBarrelYellow + parent: BaseBarrel + components: + - type: Sprite + sprite: _NF/Objects/Storage/Barrels/yellow.rsi + +- type: entity + id: MetalBarrelGreen + parent: BaseBarrel + components: + - type: Sprite + sprite: _NF/Objects/Storage/Barrels/green.rsi + +- type: entity + id: MetalBarrelWhite + parent: BaseBarrel + components: + - type: Sprite + sprite: _NF/Objects/Storage/Barrels/white.rsi + +- type: entity + id: MetalBarrelBlack + parent: BaseBarrel + components: + - type: Sprite + sprite: _NF/Objects/Storage/Barrels/black.rsi + +- type: entity + id: ChemicalBarrelExplosiveEmpty + parent: MetalBarrelRed + name: explosive barrel + suffix: Empty + description: The ancient and mysterious symbol on the front is believed to have once meant 'Use me as cover!' in days of yore. + components: + - type: Sprite + sprite: _NF/Objects/Storage/Barrels/red.rsi + layers: + - state: icon + - state: icon_open + map: ["enum.OpenableVisuals.Layer"] + visible: false + - state: metal_explosive_label + - state: paper + map: ["enum.PaperLabelVisuals.Layer"] + visible: false + +- type: entity + id: ChemicalBarrelExplosiveFilled + parent: ChemicalBarrelExplosiveEmpty + suffix: Filled + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: WeldingFuel + Quantity: 1000 + - type: DamageOnToolInteract + tools: Welding + weldingDamage: + types: + Heat: 10 + - type: PacifismDangerousAttack + - type: Explosive # This is dumb since you can refill it with water and it will still explode, so be it. + explosionType: Default + totalIntensity: 60 + - type: ContainerFill + containers: + paper_label: + - LabelWeldingFuel + +- type: entity + id: LabelWeldingFuel + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-welding-fuel + +- type: entity + parent: MetalBarrelBlack + id: ChemicalBarrelCarbon + suffix: Carbon + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Carbon + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelCarbon + +- type: entity + id: LabelCarbon + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-carbon + +- type: entity + parent: MetalBarrelRed + id: ChemicalBarrelIodine + suffix: Iodine + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Iodine + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelIodine + +- type: entity + id: LabelIodine + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-iodine + +- type: entity + parent: MetalBarrelBlue + id: ChemicalBarrelFluorine + suffix: Fluorine + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Fluorine + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelFluorine + +- type: entity + id: LabelFluorine + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-fluorine + +- type: entity + parent: MetalBarrelGreen + id: ChemicalBarrelChlorine + suffix: Chlorine + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Chlorine + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelChlorine + +- type: entity + id: LabelChlorine + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-chlorine + +- type: entity + parent: MetalBarrelWhite + id: ChemicalBarrelAluminium + suffix: Aluminium + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Aluminium + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelAluminium + +- type: entity + id: LabelAluminium + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-aluminium + +- type: entity + parent: MetalBarrelRed + id: ChemicalBarrelPhosphorus + suffix: Phosphorus + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Phosphorus + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelPhosphorus + +- type: entity + id: LabelPhosphorus + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-phosphorus + +- type: entity + parent: MetalBarrelYellow + id: ChemicalBarrelSulfur + suffix: Sulfur + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Sulfur + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelSulfur + +- type: entity + id: LabelSulfur + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-sulfur + +- type: entity + parent: MetalBarrelBlack + id: ChemicalBarrelSilicon + suffix: Silicon + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Silicon + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelSilicon + +- type: entity + id: LabelSilicon + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-silicon + +- type: entity + parent: MetalBarrelWhite + id: ChemicalBarrelHydrogen + suffix: Hydrogen + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Hydrogen + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelHydrogen + +- type: entity + id: LabelHydrogen + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-hydrogen + +- type: entity + parent: MetalBarrelGrey + id: ChemicalBarrelLithium + suffix: Lithium + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Lithium + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelLithium + +- type: entity + id: LabelLithium + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-lithium + +- type: entity + parent: MetalBarrelGrey + id: ChemicalBarrelSodium + suffix: Sodium + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Sodium + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelSodium + +- type: entity + id: LabelSodium + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-sodium + +- type: entity + parent: MetalBarrelYellow + id: ChemicalBarrelPotassium + suffix: Potassium + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Potassium + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelPotassium + +- type: entity + id: LabelPotassium + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-potassium + +- type: entity + parent: MetalBarrelGreen + id: ChemicalBarrelRadium + suffix: Radium + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Radium + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelRadium + +- type: entity + id: LabelRadium + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-radium + +- type: entity + parent: MetalBarrelGrey + id: ChemicalBarrelIron + suffix: Iron + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Iron + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelIron + +- type: entity + id: LabelIron + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-iron + +- type: entity + parent: MetalBarrelRed + id: ChemicalBarrelCopper + suffix: Copper + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Copper + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelCopper + +- type: entity + id: LabelCopper + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-copper + +- type: entity + parent: MetalBarrelYellow + id: ChemicalBarrelGold + suffix: Gold + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Gold + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelGold + +- type: entity + id: LabelGold + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-gold + +- type: entity + parent: MetalBarrelGrey + id: ChemicalBarrelMercury + suffix: Mercury + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Mercury + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelMercury + +- type: entity + id: LabelMercury + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-mercury + +- type: entity + parent: MetalBarrelWhite + id: ChemicalBarrelSilver + suffix: Silver + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Silver + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelSilver + +- type: entity + id: LabelSilver + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-silver + +- type: entity + parent: MetalBarrelBlue + id: ChemicalBarrelEthanol + suffix: Ethanol + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Ethanol + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelEthanol + +- type: entity + id: LabelEthanol + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-ethanol + +- type: entity + parent: MetalBarrelWhite + id: ChemicalBarrelSugar + suffix: Sugar + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Sugar + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelSugar + +- type: entity + id: LabelSugar + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-sugar + +- type: entity + parent: MetalBarrelRed + id: ChemicalBarrelNitrogen + suffix: Nitrogen + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Nitrogen + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelNitrogen + +- type: entity + id: LabelNitrogen + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-nitrogen + +- type: entity + parent: MetalBarrelBlue + id: ChemicalBarrelOxygen + suffix: Oxygen + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Oxygen + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelOxygen + +- type: entity + id: LabelOxygen + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-oxygen + +- type: entity + parent: MetalBarrelBlack + id: ChemicalBarrelOil + suffix: Oil + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Oil + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelOil + +- type: entity + id: LabelOil + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-oil + +- type: entity + parent: MetalBarrelGreen + id: ChemicalBarrelDiethylamine + suffix: Diethylamine + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Diethylamine + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelDiethylamine + +- type: entity + id: LabelDiethylamine + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-diethylamine + +- type: entity + parent: MetalBarrelYellow + id: ChemicalBarrelMustard + suffix: Mustard + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Mustard + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelMustard + +- type: entity + id: LabelMustard + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-mustard + +- type: entity + parent: MetalBarrelRed + id: ChemicalBarrelKetchup + suffix: Ketchup + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Ketchup + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelKetchup + +- type: entity + id: LabelKetchup + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-ketchup + +- type: entity + parent: MetalBarrelWhite + id: ChemicalBarrelMayo + suffix: Mayo + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Mayo + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelMayo + +- type: entity + id: LabelMayo + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-mayo + +- type: entity + parent: MetalBarrelYellow + id: ChemicalBarrelCornoil + suffix: Cornoil + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Cornoil + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelCornoil + +- type: entity + id: LabelCornoil + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-cornoil + +- type: entity + parent: MetalBarrelGreen + id: ChemicalBarrelOliveoil + suffix: Olive Oil + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: OilOlive + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelOilOlive + +- type: entity + id: LabelOilOlive + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-oil-olive + +- type: entity + parent: MetalBarrelGreen + id: ChemicalBarrelSpaceLube + suffix: Space Lube + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: SpaceLube + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelSpaceLube + +- type: entity + id: LabelSpaceLube + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-space-lube + +- type: entity + parent: MetalBarrelBlue + id: ChemicalBarrelSpaceCleaner + suffix: Space Cleaner + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: SpaceCleaner + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelSpaceCleaner + +- type: entity + id: LabelSpaceCleaner + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-space-cleaner + +- type: entity + parent: MetalBarrelBlue + id: ChemicalBarrelWater + suffix: Water + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Water + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelWater + +- type: entity + id: LabelWater + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-water + +- type: entity + parent: MetalBarrelYellow + id: ChemicalBarrelWhiskey + suffix: Whiskey + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Whiskey + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelWhiskey + +- type: entity + id: LabelWhiskey + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-whiskey + +- type: entity + parent: MetalBarrelWhite + id: ChemicalBarrelVodka + suffix: Vodka + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Vodka + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelVodka + +- type: entity + id: LabelVodka + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-vodka + +- type: entity + parent: MetalBarrelGreen + id: ChemicalBarrelTequila + suffix: Tequila + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Tequila + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelTequila + +- type: entity + id: LabelTequila + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-tequila + +- type: entity + parent: MetalBarrelRed + id: ChemicalBarrelRum + suffix: Rum + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Rum + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelRum + +- type: entity + id: LabelRum + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-rum + +- type: entity + parent: MetalBarrelBlue + id: ChemicalBarrelGin + suffix: Gin + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Gin + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelGin + +- type: entity + id: LabelGin + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-gin + +- type: entity + parent: MetalBarrelRed + id: ChemicalBarrelCoffeeLiqueur + suffix: Coffee Liqeueur + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: CoffeeLiqueur + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelCoffeeLiqueur + +- type: entity + id: LabelCoffeeLiqueur + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-coffeeliqueur + +- type: entity + parent: MetalBarrelGreen + id: ChemicalBarrelAbsinthe + suffix: Absinthe + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Absinthe + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelAbsinthe + +- type: entity + id: LabelAbsinthe + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-absinthe + +- type: entity + parent: MetalBarrelRed + id: ChemicalBarrelAle + suffix: Ale + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Ale + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelAle + +- type: entity + id: LabelAle + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-ale + +- type: entity + parent: MetalBarrelGreen + id: ChemicalBarrelVermouth + suffix: Vermouth + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Vermouth + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelVermouth + +- type: entity + id: LabelVermouth + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-vermouth + +- type: entity + parent: MetalBarrelRed + id: ChemicalBarrelWine + suffix: Wine + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Wine + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelWine + +- type: entity + id: LabelWine + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-wine + +- type: entity + parent: MetalBarrelGrey + id: ChemicalBarrelBeer + suffix: Beer + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Beer + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelBeer + +- type: entity + id: LabelBeer + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-beer + +- type: entity + parent: MetalBarrelBlack + id: ChemicalBarrelCognac + suffix: Cognac + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Cognac + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelCognac + +- type: entity + id: LabelCognac + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-cognac + +- type: entity + parent: MetalBarrelYellow + id: ChemicalBarrelMead + suffix: Mead + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: Mead + Quantity: 1000 + - type: ContainerFill + containers: + paper_label: + - LabelMead + +- type: entity + id: LabelMead + parent: Paper + categories: [HideSpawnMenu] + components: + - type: Paper + content: reagent-label-mead + diff --git a/Resources/Prototypes/_NF/Entities/World/Debris/wrecks.yml b/Resources/Prototypes/_NF/Entities/World/Debris/wrecks.yml index 5633ac69a75..349862552d2 100644 --- a/Resources/Prototypes/_NF/Entities/World/Debris/wrecks.yml +++ b/Resources/Prototypes/_NF/Entities/World/Debris/wrecks.yml @@ -56,12 +56,18 @@ # Big loot - id: NFSalvageMaterialCrateSpawner prob: 0.9 + - id: NFSalvageChemicalBarrelSpawner + prob: 0.08 + - id: NFSalvageServiceBarrelSpawner + prob: 0.02 + - id: NFSalvageDrinkableBarrelSpawner + prob: 0.02 + - id: NFSalvageEmptyBarrelSpawner + prob: 0.03 - id: SalvageCanisterSpawner prob: 0.2 - id: SalvageLockerSpawner prob: 0.2 - - id: SalvageTankSpawner - prob: 0.15 - id: SalvageGeneratorSpawner prob: 0.1 - id: SalvageFurnitureSpawner @@ -70,6 +76,8 @@ prob: 0.1 - id: RandomArtifactSpawner prob: 0.05 + - id: SalvageTankSpawnerHighCapacity + prob: 0.0005 # Medical - id: MedicalPodFilled # Medical bounties prob: 0.03 diff --git a/Resources/Prototypes/_NF/Recipes/Crafting/Graphs/barrel.yml b/Resources/Prototypes/_NF/Recipes/Crafting/Graphs/barrel.yml new file mode 100644 index 00000000000..ac91b2e2370 --- /dev/null +++ b/Resources/Prototypes/_NF/Recipes/Crafting/Graphs/barrel.yml @@ -0,0 +1,26 @@ +- type: constructionGraph + id: WoodenBarrel + start: start + graph: + - node: start + edges: + - to: woodenbarrel + steps: + - material: WoodPlank + amount: 5 + doAfter: 5 + + - node: woodenbarrel + entity: WoodenBarrel + edges: + - to: start + steps: + - tool: Prying + doAfter: 2 + completed: + - !type:SpawnPrototype + prototype: MaterialWoodPlank1 + amount: 5 + - !type:EmptyAllContainers + - !type:DeleteEntity + diff --git a/Resources/Prototypes/_NF/Recipes/Crafting/barrel.yml b/Resources/Prototypes/_NF/Recipes/Crafting/barrel.yml new file mode 100644 index 00000000000..a6649928cba --- /dev/null +++ b/Resources/Prototypes/_NF/Recipes/Crafting/barrel.yml @@ -0,0 +1,12 @@ +- type: construction + name: wooden barrel + id: WoodenBarrel + graph: WoodenBarrel + startNode: start + targetNode: woodenbarrel + category: construction-category-storage + description: A musty old wooden barrel. + icon: + sprite: _NF/Objects/Storage/Barrels/wood.rsi + state: icon + objectType: Structure \ No newline at end of file diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/icon.png b/Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1382a4809eec06c5aa5690236ad32829c1e20b GIT binary patch literal 649 zcmV;40(Sk0P)^3KD**uB zM7)f$BsZQ8!LoYX;Qm0a#P7*7e{T;l3;n#w=Jfpr7FJ@w?IPS6QK|hF?*< z0021Wc&$%1_W(R_63L zyUt3$S%j1k2qDfK+n{XJ9v8f>fDoNT14D2KsN6M=mYOg2n>bD z7(<@tV?Z5*5P2%$XqNC000000NkvXXu0mjfOTs2F literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/icon_open.png b/Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/icon_open.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc195f27d038826d08df79689c5b6e3ac289aab GIT binary patch literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pje4(L`iUdT1k0gQ7S_~VrE{6o}X)of~lV2 z_vY`DfhxA7MtG)qdTKFn06DA-QjDw&j6jwb5KBYZAh&2RGK0mLfNVoXCI&tr9R5`Y+_A4a2C$-vCOFoB(c1t@P|WNg5=0AeOcJ?jF9Ig@~F5MTnD!UR?s zWN86pL3J4#7=UDxm#7^H^80%R$kgz3aSVxYe|!8OCxZbGv!VavzvelbDGmFYS-$UJ j$lhYRK9Yf`P7{HGFEXN$Y!vcAd~DDpzp|j!;;O&B$V~f`|NJz zTZ$(QpZ%YleCGe|Di?u}(@s5&7e5~5QBqRkF>n_N)lE8*YRJsY?3`002Beq|cTa!6 z;xWSx)|XRxfS{ng=I19)*L|zDwLkp0xO$0%=MBb9MP3oIpPrqSo}_b#^}{m868S~V zm1d4SpL3cvoDvlN!y+4SeOqJU%R_N&f`WoPJJ;HI@^p4}fv|<_#_Ho-ZChvSC;RFf zG=zWpU+;0K{ivl5uK^I0WZqb~!q;jOpWOd$alhmQAegcHiHb7FUCPRN*&Rg;JPOt< z(NY=NdX5_<@;JB3G`tbWdAWF9E_2xD50>CSVqlo)HvQcu?${f^kYw<5^>bP0l+XkK Di&%{N literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/paper.png b/Resources/Textures/_NF/Objects/Storage/Barrels/black.rsi/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..08d7f696fec5f3262825af9af24efb662138b76b GIT binary patch literal 296 zcmV+@0oVSCP)GPvC_&m5G1W&Helf*#KI+5h}d5XNkj!x zIDU$EV2b&`yTi-_gb+fAf9E=y06_9-eB5+g=YF@L>u65L^`{^vWYZ1=VT4w*52X|U zaOO1t0KLJ&`bvOSO(O^+*tU&!$4S4TnRIDulAsW->FGK;ra^FdaOCbX$?Bj9f)>XJY z7Y{3$l|b(buE!r);xZKpAHLU+%H{DmwWp7j3sqav05DEPbYo3iv3wTx@woTmHB?!_ zm9_J%Dd_~-Y71k3egWvL$W8~n1Tz(>^Zu6-+G@*|09Az3r@VS8Nn*Po7?$z_3|ruu zngmYFp_tCX>6u5lP=#OcnqtYMs;q$9Zz33tKzaLqcmfWm3jnaX7{GRSthV0Jqy?7>dC0<)D7Ox)=Zee4LxXxB5?gyjl9%nOv%Y18_1DL3wi8kmJXz zAqfDTvi6GahIrP{iZfG_oePsbQA}s;TP-LeB>TrAJ`(-nqjf{73;aUI1!g3yh^evy zRaUSNS*F^MsSy#6XDSjJ<71e$z?BPCsImg5XPzZ3I{^}59}n^L0@k}{et)_Bf)^0H z%sqfgz{)~IlwluF)d$Unwi@WQ;jlr=K^5U3Mm z`uA+us3*DExpNxs+%%jAEH?BDUc9@zg+@I&+E;O-p5%5n;xw2ZWc9lnan$6Ow6ln9 z3rHm#P8Y;CTl%=!>ZNDT^>!lvI6;>1s;*b3=DjSL74G){)!Z!pje4(L`iUdT1k0gQ7S_~VrE{6o}X)of~lV2 z_vY`DfhxA7MtG)qdTKFn06DA-QjDw&j6jwb5KBYZAh&2RGK0mLfNVoXCI&tr9R5`Y+_A4a2C$-vCOFoB(c1t@P|WNg5=0AeOcJ?jF9Ig@~F5MTnD!UR?s zWN86pL3J4#7=UDxm#7^H^80%R$kgz3aSVxYe|!8OCxZbGv!VavzvelbDGmFYS-$UJ j$lhYRK9Yf`P7{HGFEXN$Y!vcAd~DDpzp|j!;;O&B$V~f`|NJz zTZ$(QpZ%YleCGe|Di?u}(@s5&7e5~5QBqRkF>n_N)lE8*YRJsY?3`002Beq|cTa!6 z;xWSx)|XRxfS{ng=I19)*L|zDwLkp0xO$0%=MBb9MP3oIpPrqSo}_b#^}{m868S~V zm1d4SpL3cvoDvlN!y+4SeOqJU%R_N&f`WoPJJ;HI@^p4}fv|<_#_Ho-ZChvSC;RFf zG=zWpU+;0K{ivl5uK^I0WZqb~!q;jOpWOd$alhmQAegcHiHb7FUCPRN*&Rg;JPOt< z(NY=NdX5_<@;JB3G`tbWdAWF9E_2xD50>CSVqlo)HvQcu?${f^kYw<5^>bP0l+XkK Di&%{N literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/blue.rsi/paper.png b/Resources/Textures/_NF/Objects/Storage/Barrels/blue.rsi/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..08d7f696fec5f3262825af9af24efb662138b76b GIT binary patch literal 296 zcmV+@0oVSCP)GPvC_&m5G1W&Helf*#KI+5h}d5XNkj!x zIDU$EV2b&`yTi-_gb+fAf9E=y06_9-eB5+g=YF@L>u65L^`{^vWYZ1=VT4w*52X|U zaOO1t0KLJ&`bvOSO(O^+*tU&!$4S7DRlZe|Mc@GLTgl%qW*mMNt0Z1D{?mNq4TodGTZ8a%2gh^Y~l zc?*$+l_avSE7(}tlvo7%c+P5t{jP!ourpLE>~n3I1VV|RIeOzX0J!cuMLay)ViQv% zxPJdE0+ZvNl`Kl2c?EZ#KXkRzOL-J`-Xc>-;l*m!ewW)iWReEDP{G{Hl=70K*qe`7gfLnwUXB0b?)G-UxMkM`! zz!nVp`k{>j`r01kfQ;N$7Ew)cw536bK_DH}F?H3C^lGhl0$#s0eC=EmKn?(~{%-%| zt`o!{7#Qkk;u!5HfBmftu{m3bYEk3@k z_ecP+(i&46&v!3BXlcc|@1!omopbfIJ$9>wU>^`EK8p6@<8?zOful+tQO#0;6A3qB z#2_FBL2P=6D?_11L^ZCL@~C-a47=FnwhloI0y!YNSoBDMBBn+VKYtSoD@i+GGoqRT zXo_$T;1ZxRbRuG1`Srn*A+rXWW!NitKDe#8n{>8AU)$r_{M#}Fz?7jInq|lX_j3%m z%dnl4lMH`LAE5Z-GOU(&rIE2w6OYhx7!i?SR8#Qk$!Ao{yT5iSu9kPDbaI<#W`nLi zo!o{|{KEY?5!wQp39sLS$Liv#T|Q&i0`id4e2r4t+<>5v$o(regd54OZM0n R>AC;_002ovPDHLkV1hunWuO26 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/green.rsi/icon_open.png b/Resources/Textures/_NF/Objects/Storage/Barrels/green.rsi/icon_open.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc195f27d038826d08df79689c5b6e3ac289aab GIT binary patch literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pje4(L`iUdT1k0gQ7S_~VrE{6o}X)of~lV2 z_vY`DfhxA7MtG)qdTKFn06DA-QjDw&j6jwb5KBYZAh&2RGK0mLfNVoXCI&tr9R5`Y+_A4a2C$-vCOFoB(c1t@P|WNg5=0AeOcJ?jF9Ig@~F5MTnD!UR?s zWN86pL3J4#7=UDxm#7^H^80%R$kgz3aSVxYe|!8OCxZbGv!VavzvelbDGmFYS-$UJ j$lhYRK9Yf`P7{HGFEXN$Y!vcAd~DDpzp|j!;;O&B$V~f`|NJz zTZ$(QpZ%YleCGe|Di?u}(@s5&7e5~5QBqRkF>n_N)lE8*YRJsY?3`002Beq|cTa!6 z;xWSx)|XRxfS{ng=I19)*L|zDwLkp0xO$0%=MBb9MP3oIpPrqSo}_b#^}{m868S~V zm1d4SpL3cvoDvlN!y+4SeOqJU%R_N&f`WoPJJ;HI@^p4}fv|<_#_Ho-ZChvSC;RFf zG=zWpU+;0K{ivl5uK^I0WZqb~!q;jOpWOd$alhmQAegcHiHb7FUCPRN*&Rg;JPOt< z(NY=NdX5_<@;JB3G`tbWdAWF9E_2xD50>CSVqlo)HvQcu?${f^kYw<5^>bP0l+XkK Di&%{N literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/green.rsi/paper.png b/Resources/Textures/_NF/Objects/Storage/Barrels/green.rsi/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..08d7f696fec5f3262825af9af24efb662138b76b GIT binary patch literal 296 zcmV+@0oVSCP)GPvC_&m5G1W&Helf*#KI+5h}d5XNkj!x zIDU$EV2b&`yTi-_gb+fAf9E=y06_9-eB5+g=YF@L>u65L^`{^vWYZ1=VT4w*52X|U zaOO1t0KLJ&`bvOSO(O^+*tU&!$4SWdP)$T8}B`C# zG*6AC6vYgNLe~FKD1=L*h(ldRqtU?Am6cO51;Kq9ZUHGpF#+K2@-pOj+>u|=H0-D< z0N8|#EFh&Qrhh7mrQ{6ccpMc?bL10Y6-~q2Oa^P|v@o&&GI=5*AuNhCx=o0xs>tr` zVJ)2&Xadf#g6$ua2bvs!m7)EEGLuUckWv)$=E4F1xb8cF9FN;LVNt}R2lugf>(1#) z<`vMpf|r|bTzNHJ$KlZtDw>Av+!t%CRIO7*1Hf4(;{;2|8P{iFQN-4V&oGQ8?%iJG z4apYJZXM(N&klg@ifDDvE3l^P-S@wj(QX}61u%=)%^!{5>e z2>!SY^VwbD+T0EE$>WE%^MJ>OiHL+3uQ!p;?v8dV&S!Up)%6V)%>r5d>iPygzJEu( z_5++-Kr-PEOyJe?XV$pW>bEjm);m102mUrB*KD`qa+;X71^@921+GavUFT=o00000 LNkvXXu0mjf8D3>a literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/grey.rsi/icon_open.png b/Resources/Textures/_NF/Objects/Storage/Barrels/grey.rsi/icon_open.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc195f27d038826d08df79689c5b6e3ac289aab GIT binary patch literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pje4(L`iUdT1k0gQ7S_~VrE{6o}X)of~lV2 z_vY`DfhxA7MtG)qdTKFn06DA-QjDw&j6jwb5KBYZAh&2RGK0mLfNVoXCI&tr9R5`Y+_A4a2C$-vCOFoB(c1t@P|WNg5=0AeOcJ?jF9Ig@~F5MTnD!UR?s zWN86pL3J4#7=UDxm#7^H^80%R$kgz3aSVxYe|!8OCxZbGv!VavzvelbDGmFYS-$UJ j$lhYRK9Yf`P7{HGFEXN$Y!vcAd~DDpzp|j!;;O&B$V~f`|NJz zTZ$(QpZ%YleCGe|Di?u}(@s5&7e5~5QBqRkF>n_N)lE8*YRJsY?3`002Beq|cTa!6 z;xWSx)|XRxfS{ng=I19)*L|zDwLkp0xO$0%=MBb9MP3oIpPrqSo}_b#^}{m868S~V zm1d4SpL3cvoDvlN!y+4SeOqJU%R_N&f`WoPJJ;HI@^p4}fv|<_#_Ho-ZChvSC;RFf zG=zWpU+;0K{ivl5uK^I0WZqb~!q;jOpWOd$alhmQAegcHiHb7FUCPRN*&Rg;JPOt< z(NY=NdX5_<@;JB3G`tbWdAWF9E_2xD50>CSVqlo)HvQcu?${f^kYw<5^>bP0l+XkK Di&%{N literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/grey.rsi/paper.png b/Resources/Textures/_NF/Objects/Storage/Barrels/grey.rsi/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..08d7f696fec5f3262825af9af24efb662138b76b GIT binary patch literal 296 zcmV+@0oVSCP)GPvC_&m5G1W&Helf*#KI+5h}d5XNkj!x zIDU$EV2b&`yTi-_gb+fAf9E=y06_9-eB5+g=YF@L>u65L^`{^vWYZ1=VT4w*52X|U zaOO1t0KLJ&`bvOSO(O^+*tU&!$4SYuW6g^Wu-ee$F2(>m%B{~~6#H4l>^e-59{(v6-nV?7ku~23PJ1(YgGQiAx4>0P&vw}B=d(XS?o;wfVFGFHIbR1`9O;c58 zGamQ8ZxMnlA!wK;PE8YUj*n+zN>X?lVF8+|Isou=V*`0j3*=XI9k0*M0ANDM(gHM9 zbuzMoz0@l5nue;b2lA<~s;=XCvkARkmzEYllNS^jIYL(qKLXGnQm&+8Osj71?vjza6=T4E=vHGxX z?ugX~et|X91OT*0L)iA1DS+FAsw{h@q=8wW9Fg(^0!N@kBDhO{Qm>EAcpR1C2n9tB z@v0{l5)g~IkGB=YTYL9ofJzA8uq@n(u7F&Qk&%^&7z+u=CKKLg zDk2k$p>5mVdhO!EOHKf6C(|%}<94VgXQx8b7T#o&(O zdCEDBQm@bD{M$AJz_ei){5Ir)`#J`~Z8$9|$cDdV4p97Y8+JQwDV5GRkJZ}~?*kDV z78DsTKcAx8X)kvx?snQzv3|m%d7!&5)=$v-`h|Jz2Lz9RRw5RQ;-l~88?^g_X4CtP pNbI@)8`5ibSaSs>W*xzQ`~q)5P-J?j+AshB002ovPDHLkV1nqBSXTf5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/red.rsi/icon_open.png b/Resources/Textures/_NF/Objects/Storage/Barrels/red.rsi/icon_open.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc195f27d038826d08df79689c5b6e3ac289aab GIT binary patch literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pje4(L`iUdT1k0gQ7S_~VrE{6o}X)of~lV2 z_vY`DfhxA7MtG)qdTKFn06DA-QjDw&j6jwb5KBYZAh&2RGK0mLfNVoXCI&tr9R5`Y+_A4a2C$-vCOFoB(c1t@P|WNg5=0AeOcJ?jF9Ig@~F5MTnD!UR?s zWN86pL3J4#7=UDxm#7^H^80%R$kgz3aSVxYe|!8OCxZbGv!VavzvelbDGmFYS-$UJ j$lhYRK9Yf`P7{HGFEXN$Y!vcAd~DDpzp|j!;;O&B$V~f`|NJz zTZ$(QpZ%YleCGe|Di?u}(@s5&7e5~5QBqRkF>n_N)lE8*YRJsY?3`002Beq|cTa!6 z;xWSx)|XRxfS{ng=I19)*L|zDwLkp0xO$0%=MBb9MP3oIpPrqSo}_b#^}{m868S~V zm1d4SpL3cvoDvlN!y+4SeOqJU%R_N&f`WoPJJ;HI@^p4}fv|<_#_Ho-ZChvSC;RFf zG=zWpU+;0K{ivl5uK^I0WZqb~!q;jOpWOd$alhmQAegcHiHb7FUCPRN*&Rg;JPOt< z(NY=NdX5_<@;JB3G`tbWdAWF9E_2xD50>CSVqlo)HvQcu?${f^kYw<5^>bP0l+XkK Di&%{N literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/red.rsi/paper.png b/Resources/Textures/_NF/Objects/Storage/Barrels/red.rsi/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..08d7f696fec5f3262825af9af24efb662138b76b GIT binary patch literal 296 zcmV+@0oVSCP)GPvC_&m5G1W&Helf*#KI+5h}d5XNkj!x zIDU$EV2b&`yTi-_gb+fAf9E=y06_9-eB5+g=YF@L>u65L^`{^vWYZ1=VT4w*52X|U zaOO1t0KLJ&`bvOSO(O^+*tU&!$4SqT{}UAN1OC2 zOxe6*TNIgmI(LaQX6S9v?o|I|qCQDRLgiLIN5`2%w;x&?a!lvI6;>1s;*b3=DjSL74G){)!Z!pje4(L`iUdT1k0gQ7S_~VrE{6o}X)of~lV2 z_vY`DfhxA7MtG)qdTKFn06DA-QjDw&j6jwb5KBYZAh&2RGK0mLfNVoXCI&tr9R5`Y+_A4a2C$-vCOFoB(c1t@P|WNg5=0AeOcJ?jF9Ig@~F5MTnD!UR?s zWN86pL3J4#7=UDxm#7^H^80%R$kgz3aSVxYe|!8OCxZbGv!VavzvelbDGmFYS-$UJ j$lhYRK9Yf`P7{HGFEXN$Y!vcAd~DDpzp|j!;;O&B$V~f`|NJz zTZ$(QpZ%YleCGe|Di?u}(@s5&7e5~5QBqRkF>n_N)lE8*YRJsY?3`002Beq|cTa!6 z;xWSx)|XRxfS{ng=I19)*L|zDwLkp0xO$0%=MBb9MP3oIpPrqSo}_b#^}{m868S~V zm1d4SpL3cvoDvlN!y+4SeOqJU%R_N&f`WoPJJ;HI@^p4}fv|<_#_Ho-ZChvSC;RFf zG=zWpU+;0K{ivl5uK^I0WZqb~!q;jOpWOd$alhmQAegcHiHb7FUCPRN*&Rg;JPOt< z(NY=NdX5_<@;JB3G`tbWdAWF9E_2xD50>CSVqlo)HvQcu?${f^kYw<5^>bP0l+XkK Di&%{N literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/white.rsi/paper.png b/Resources/Textures/_NF/Objects/Storage/Barrels/white.rsi/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..08d7f696fec5f3262825af9af24efb662138b76b GIT binary patch literal 296 zcmV+@0oVSCP)GPvC_&m5G1W&Helf*#KI+5h}d5XNkj!x zIDU$EV2b&`yTi-_gb+fAf9E=y06_9-eB5+g=YF@L>u65L^`{^vWYZ1=VT4w*52X|U zaOO1t0KLJ&`bvOSO(O^+*tU&!$4S?Mkcif|m#w)DIS4d7 zv~P915aGeH+SO4yy80snWBzkbn}#y8uxVV4Ax-|1+_pq;dm1bjA1_qV_#utx|9t_`@bP?!N22WQ%mvv4FO#mcBf<^!U literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/icon.png b/Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc92c166d4378a6145536c6386dd95e55c9ea7f GIT binary patch literal 1138 zcmV-&1daQNP)YAX9X8WNB|8RBvx=!KdMT000C1 zNkl*{Q&wL`~LRvcaw=0y=i5FNt2 z6}<4q8xizEuXZ!WypvuC_M%jZMb?6`!rCp9cG)UPld{C5Uon|!(vRas$T8`blaDIH z=juJ@JTK4hJnwrruSS+-o@HqMcYya^>{gv{xtV0GE81UeBHvnMk77#jZ zL|0<~%uNQlefvHD-`)vT1gQvc$z_#aJO4axcLUe1dsTCQ_x&Q5vl-d&vT5P)bsKiPCoi@ylnA&MD{dH-yCCZGRVY(H1VaoM+3Os4ZQu? zt*7Rdicd#e>^GV5?F#%l`F(8w$*f~w>;o+RALt%z$JQ+{^6t25;pv-W#8#sC{X6(} z1>)W*0-KrI0OwCOVKwRr3&RWz4Ut}$!0m3p)-3=ablQsML|0?XO$O2Tk1{_$j~Ml` zd9cS%iyPGgOeT{oiXDu$XIThrBev?;alMMe;Q+vHw-@C{A`$F%JCR6)*vvO92b1)k zHuHO;jrj-5Boc}00eyXaNRmX{JB72;!2aW10G5MEPC1Q5`G@a?*E76%`2w@v7!!Bz z)CM?b(~=TAbaizxI5^0oiLaGz9BVudfVr+-nX?esreA7C^THUR**T)=49@yB#+Q<{ z1NxY+IunY zYiRQrh;8Wr_{-)5U?;P~dVC!Kt^dcOC8-&3<^VJXo>*J4RfpB6FUpT6)51ftZPrN@Y3aG;*x*IKkDF>Js!z z&B{2H%CcqYARJz+9#Gf?R($lHHgm$HXUP{Y>PSBFZ=44#2a`w_M^*m=6#+!CgO(OE zk|fdiXs&2|3->```vY1x;Y5P1txeUpFAF$~0FWf9=((*e_dkgJ5o2$2lW-ydP*L%U z0q1O5Wjz4}Q!-Y37z|p~&#z)Y9&zR%H#Q16OyL0(D7u%7W>r7EssVWfK;Mbnu`GY| zl2f_o>sp!CtcH7ax$8=bR|Pl>DHW9#t{L!e$1?}~4bn|!-yh?@1poj507*qoM6N<$ Ef&g0-IRF3v literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/meta.json b/Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/meta.json new file mode 100644 index 00000000000..8e941fd7d61 --- /dev/null +++ b/Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation PR https://github.com/tgstation/tgstation/pull/38977, modified by rosieposieeee", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/open.png b/Resources/Textures/_NF/Objects/Storage/Barrels/wood.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc92c166d4378a6145536c6386dd95e55c9ea7f GIT binary patch literal 1138 zcmV-&1daQNP)YAX9X8WNB|8RBvx=!KdMT000C1 zNkl*{Q&wL`~LRvcaw=0y=i5FNt2 z6}<4q8xizEuXZ!WypvuC_M%jZMb?6`!rCp9cG)UPld{C5Uon|!(vRas$T8`blaDIH z=juJ@JTK4hJnwrruSS+-o@HqMcYya^>{gv{xtV0GE81UeBHvnMk77#jZ zL|0<~%uNQlefvHD-`)vT1gQvc$z_#aJO4axcLUe1dsTCQ_x&Q5vl-d&vT5P)bsKiPCoi@ylnA&MD{dH-yCCZGRVY(H1VaoM+3Os4ZQu? zt*7Rdicd#e>^GV5?F#%l`F(8w$*f~w>;o+RALt%z$JQ+{^6t25;pv-W#8#sC{X6(} z1>)W*0-KrI0OwCOVKwRr3&RWz4Ut}$!0m3p)-3=ablQsML|0?XO$O2Tk1{_$j~Ml` zd9cS%iyPGgOeT{oiXDu$XIThrBev?;alMMe;Q+vHw-@C{A`$F%JCR6)*vvO92b1)k zHuHO;jrj-5Boc}00eyXaNRmX{JB72;!2aW10G5MEPC1Q5`G@a?*E76%`2w@v7!!Bz z)CM?b(~=TAbaizxI5^0oiLaGz9BVudfVr+-nX?esreA7C^THUR**T)=49@yB#+Q<{ z1NxY+IunY zYiRQrh;8Wr_{-)5U?;P~dVC!Kt^dcOC8-&3<^VJXo>*J4RfpB6FUpT6)51ftZPrN@Y3aG;*x*IKkDF>Js!z z&B{2H%CcqYARJz+9#Gf?R($lHHgm$HXUP{Y>PSBFZ=44#2a`w_M^*m=6#+!CgO(OE zk|fdiXs&2|3->```vY1x;Y5P1txeUpFAF$~0FWf9=((*e_dkgJ5o2$2lW-ydP*L%U z0q1O5Wjz4}Q!-Y37z|p~&#z)Y9&zR%H#Q16OyL0(D7u%7W>r7EssVWfK;Mbnu`GY| zl2f_o>sp!CtcH7ax$8=bR|Pl>DHW9#t{L!e$1?}~4bn|!-yh?@1poj507*qoM6N<$ Ef&g0-IRF3v literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/icon.png b/Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a22bef0ff3f2d5e33409628cba55f296af2cc1e6 GIT binary patch literal 787 zcmV+u1MK{XP)l2B8RKMfF}^rSfld?yEY?_H@;2fqp4`|kJq-h03Ackh6|430Lb zs%qa@G!jscct*7UqQ`-wq63@q4&?FXqSZmSz`We-JpZMMYOPHbz$`-FIInFb2}}dwSlNES!V&Pi z4X3?8VzmzM*a)(P7D5tl$R$Zj6$SQI8yBYCSX!wKF2LpNOivs?q>Uv%H;^^qmnsT; z2Zvy9wc+v!x)=iqm=2C=zljK!(~fHGyEdNR*aiR;%L?oOCMMlb94%dpx9ZP3RVneE8fd?_9C%bXL9~+8v>x(&ewRuheTlVDSjZPPm-Ic=hDhxY6ogE^cbiSc$#oZ$om;HY+Zp#Iz&$j~{B%OO^}( RWDfuU002ovPDHLkV1m8AWr6?z literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/icon_open.png b/Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/icon_open.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc195f27d038826d08df79689c5b6e3ac289aab GIT binary patch literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pje4(L`iUdT1k0gQ7S_~VrE{6o}X)of~lV2 z_vY`DfhxA7MtG)qdTKFn06DA-QjDw&j6jwb5KBYZAh&2RGK0mLfNVoXCI&tr9R5`Y+_A4a2C$-vCOFoB(c1t@P|WNg5=0AeOcJ?jF9Ig@~F5MTnD!UR?s zWN86pL3J4#7=UDxm#7^H^80%R$kgz3aSVxYe|!8OCxZbGv!VavzvelbDGmFYS-$UJ j$lhYRK9Yf`P7{HGFEXN$Y!vcAd~DDpzp|j!;;O&B$V~f`|NJz zTZ$(QpZ%YleCGe|Di?u}(@s5&7e5~5QBqRkF>n_N)lE8*YRJsY?3`002Beq|cTa!6 z;xWSx)|XRxfS{ng=I19)*L|zDwLkp0xO$0%=MBb9MP3oIpPrqSo}_b#^}{m868S~V zm1d4SpL3cvoDvlN!y+4SeOqJU%R_N&f`WoPJJ;HI@^p4}fv|<_#_Ho-ZChvSC;RFf zG=zWpU+;0K{ivl5uK^I0WZqb~!q;jOpWOd$alhmQAegcHiHb7FUCPRN*&Rg;JPOt< z(NY=NdX5_<@;JB3G`tbWdAWF9E_2xD50>CSVqlo)HvQcu?${f^kYw<5^>bP0l+XkK Di&%{N literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/paper.png b/Resources/Textures/_NF/Objects/Storage/Barrels/yellow.rsi/paper.png new file mode 100644 index 0000000000000000000000000000000000000000..08d7f696fec5f3262825af9af24efb662138b76b GIT binary patch literal 296 zcmV+@0oVSCP)GPvC_&m5G1W&Helf*#KI+5h}d5XNkj!x zIDU$EV2b&`yTi-_gb+fAf9E=y06_9-eB5+g=YF@L>u65L^`{^vWYZ1=VT4w*52X|U zaOO1t0KLJ&`bvOSO(O^+*tU&!$4S Date: Sat, 21 Dec 2024 23:06:35 +0000 Subject: [PATCH 06/20] Automatic Changelog (#1776) --- Resources/Changelog/Frontier.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 78d52496b28..3b8cffce1e6 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -6055,3 +6055,13 @@ Entries: barrels. id: 5606 time: '2024-12-21T23:05:32.0000000+00:00' +- author: dvir001 + changes: + - type: Add + message: >- + Added barrels of chems, oil, water, fuel, booze, etc. to wrecks, rare + chems to cargo. + - type: Tweak + message: The ChefVend now contains one jar of each oil. + id: 5607 + time: '2024-12-21T23:06:11.0000000+00:00' From 70a205f7efa06e52a97efc4e8ddab358a0d6f2fa Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Sun, 22 Dec 2024 16:52:52 +0200 Subject: [PATCH 07/20] Multi gamemod support (#2541) --- Content.IntegrationTests/PoolSettings.cs | 4 +- .../Systems/ShipyardSystem.Consoles.cs | 1 - ...mponent.cs => NFAdventureRuleComponent.cs} | 7 +- .../_NF/GameRule/NfAdventureRuleSystem.cs | 261 +-------------- .../_NF/GameRule/PointOfInterestPrototype.cs | 17 +- .../_NF/GameRule/PointOfInterestSystem.cs | 299 ++++++++++++++++++ Content.Shared/CCVar/CCVars.cs | 2 +- .../Locale/en-US/_NF/adventure/adventure.ftl | 8 +- .../Prototypes/_NF/GameRules/roundstart.yml | 4 +- .../_NF/PointsOfInterest/anomalousgeode.yml | 1 + .../_NF/PointsOfInterest/anomalouslab.yml | 3 +- .../_NF/PointsOfInterest/bahamamamas.yml | 1 + .../_NF/PointsOfInterest/caseys.yml | 3 +- .../_NF/PointsOfInterest/courthouse.yml | 3 +- .../Prototypes/_NF/PointsOfInterest/cove.yml | 1 + .../_NF/PointsOfInterest/depots.yml | 3 +- .../_NF/PointsOfInterest/edison.yml | 9 +- .../_NF/PointsOfInterest/grifty.yml | 3 +- .../Prototypes/_NF/PointsOfInterest/lodge.yml | 1 + .../_NF/PointsOfInterest/lpbravo.yml | 5 +- .../_NF/PointsOfInterest/mchobo.yml | 3 +- .../Prototypes/_NF/PointsOfInterest/nfsd.yml | 1 + .../_NF/PointsOfInterest/northpole.yml | 5 +- .../_NF/PointsOfInterest/omnichurch.yml | 5 +- .../_NF/PointsOfInterest/thepit.yml | 1 + .../_NF/PointsOfInterest/tinniasrest.yml | 1 + .../Prototypes/_NF/PointsOfInterest/trade.yml | 1 + .../_NF/PointsOfInterest/trademall.yml | 1 + Resources/Prototypes/_NF/game_presets.yml | 28 +- Resources/Prototypes/game_presets.yml | 10 +- 30 files changed, 396 insertions(+), 296 deletions(-) rename Content.Server/_NF/GameRule/Components/{AdventureRuleComponent.cs => NFAdventureRuleComponent.cs} (58%) rename {Content.Shared => Content.Server}/_NF/GameRule/PointOfInterestPrototype.cs (83%) create mode 100644 Content.Server/_NF/GameRule/PointOfInterestSystem.cs diff --git a/Content.IntegrationTests/PoolSettings.cs b/Content.IntegrationTests/PoolSettings.cs index 187af4569f9..5cebda0bfa1 100644 --- a/Content.IntegrationTests/PoolSettings.cs +++ b/Content.IntegrationTests/PoolSettings.cs @@ -1,4 +1,4 @@ -#nullable enable +#nullable enable using Robust.Shared.Random; @@ -93,7 +93,7 @@ public sealed class PoolSettings /// /// Frontier: the preset to run the game in. /// Set to secret for upstream tests to mimic upstream behaviour. - /// If you need to check adventure game rule things, set this to Adventure. + /// If you need to check adventure game rule things, set this to nfadventure or nfpirate. /// public string GameLobbyDefaultPreset { get; set; } = "secret"; diff --git a/Content.Server/Shipyard/Systems/ShipyardSystem.Consoles.cs b/Content.Server/Shipyard/Systems/ShipyardSystem.Consoles.cs index 62d225badd7..923371f3b1e 100644 --- a/Content.Server/Shipyard/Systems/ShipyardSystem.Consoles.cs +++ b/Content.Server/Shipyard/Systems/ShipyardSystem.Consoles.cs @@ -3,7 +3,6 @@ using Content.Server.Radio.EntitySystems; using Content.Server._NF.Bank; using Content.Server.Shipyard.Components; -using Content.Shared._NF.GameRule; using Content.Shared.Bank.Components; using Content.Shared.Shipyard.Events; using Content.Shared.Shipyard.BUI; diff --git a/Content.Server/_NF/GameRule/Components/AdventureRuleComponent.cs b/Content.Server/_NF/GameRule/Components/NFAdventureRuleComponent.cs similarity index 58% rename from Content.Server/_NF/GameRule/Components/AdventureRuleComponent.cs rename to Content.Server/_NF/GameRule/Components/NFAdventureRuleComponent.cs index fc85a5209c6..2ea4339bb70 100644 --- a/Content.Server/_NF/GameRule/Components/AdventureRuleComponent.cs +++ b/Content.Server/_NF/GameRule/Components/NFAdventureRuleComponent.cs @@ -1,10 +1,7 @@ -using Content.Shared.Procedural; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; - namespace Content.Server._NF.GameRule.Components; -[RegisterComponent, Access(typeof(NfAdventureRuleSystem))] -public sealed partial class AdventureRuleComponent : Component +[RegisterComponent, Access(typeof(NFAdventureRuleSystem))] +public sealed partial class NFAdventureRuleComponent : Component { public List NFPlayerMinds = new(); public List CargoDepots = new(); diff --git a/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs b/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs index 5ee7e6e8b7a..68062cdb598 100644 --- a/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs +++ b/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs @@ -1,24 +1,15 @@ using System.Linq; using System.Net.Http; -using System.Numerics; using System.Text; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading.Tasks; -using Content.Shared._NF.GameRule; using Content.Server._NF.GameTicking.Events; -using Robust.Server.GameObjects; -using Robust.Server.Maps; using Content.Shared.GameTicking.Components; -using Robust.Shared.Map; using Robust.Shared.Prototypes; -using Robust.Shared.Random; -using Content.Server.Shuttles.Systems; using Content.Server.Cargo.Components; using Content.Server.GameTicking; using Content.Server.GameTicking.Rules; -using Content.Server.Maps; -using Content.Server.Station.Systems; using Content.Shared._NF.CCVar; // Frontier using Robust.Shared.Configuration; using Content.Shared._NF.Bank; @@ -29,26 +20,19 @@ using Content.Shared.GameTicking; using Robust.Shared.Enums; using Robust.Server.Player; -using Content.Server.Warps; namespace Content.Server._NF.GameRule; /// /// This handles the dungeon and trading post spawning, as well as round end capitalism summary /// -public sealed class NfAdventureRuleSystem : GameRuleSystem +public sealed class NFAdventureRuleSystem : GameRuleSystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IConfigurationManager _configurationManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; - [Dependency] private readonly MapLoaderSystem _map = default!; - [Dependency] private readonly MetaDataSystem _meta = default!; - [Dependency] private readonly StationSystem _station = default!; - [Dependency] private readonly ShuttleSystem _shuttle = default!; - [Dependency] private readonly PhysicsSystem _physics = default!; [Dependency] private readonly BankSystem _bank = default!; - [Dependency] private readonly StationRenameWarpsSystems _renameWarps = default!; + [Dependency] private readonly PointOfInterestSystem _poi = default!; private readonly HttpClient _httpClient = new(); @@ -77,11 +61,6 @@ public PlayerRoundBankInformation(int startBalance, string name, NetUserId userI [ViewVariables] private Dictionary _players = new(); - private float _distanceOffset = 1f; - private List _stationCoords = new(); - - private MapId _mapId; - /// public override void Initialize() { @@ -92,7 +71,7 @@ public override void Initialize() _playerManager.PlayerStatusChanged += PlayerManagerOnPlayerStatusChanged; } - protected override void AppendRoundEndText(EntityUid uid, AdventureRuleComponent component, GameRuleComponent gameRule, ref RoundEndTextAppendEvent ev) + protected override void AppendRoundEndText(EntityUid uid, NFAdventureRuleComponent component, GameRuleComponent gameRule, ref RoundEndTextAppendEvent ev) { ev.AddLine(Loc.GetString("adventure-list-start")); var allScore = new List>(); @@ -206,12 +185,9 @@ private void OnRoundRestart(RoundRestartCleanupEvent ev) _players.Clear(); } - protected override void Started(EntityUid uid, AdventureRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) + protected override void Started(EntityUid uid, NFAdventureRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) { - _mapId = GameTicker.DefaultMap; - - _distanceOffset = _configurationManager.GetCVar(NFCCVars.POIDistanceModifier); - _stationCoords = new List(); + var mapUid = GameTicker.DefaultMap; //First, we need to grab the list and sort it into its respective spawning logics List depotProtos = new(); @@ -237,11 +213,11 @@ protected override void Started(EntityUid uid, AdventureRuleComponent component, remainingUniqueProtosBySpawnGroup[location.SpawnGroup].Add(location); } } - GenerateDepots(depotProtos, out component.CargoDepots); - GenerateMarkets(marketProtos, out component.MarketStations); - GenerateRequireds(requiredProtos, out component.RequiredPois); - GenerateOptionals(optionalProtos, out component.OptionalPois); - GenerateUniques(remainingUniqueProtosBySpawnGroup, out component.UniquePois); + _poi.GenerateDepots(mapUid, depotProtos, out component.CargoDepots); + _poi.GenerateMarkets(mapUid, marketProtos, out component.MarketStations); + _poi.GenerateRequireds(mapUid, requiredProtos, out component.RequiredPois); + _poi.GenerateOptionals(mapUid, optionalProtos, out component.OptionalPois); + _poi.GenerateUniques(mapUid, remainingUniqueProtosBySpawnGroup, out component.UniquePois); base.Started(uid, component, gameRule, args); @@ -249,223 +225,6 @@ protected override void Started(EntityUid uid, AdventureRuleComponent component, RaiseLocalEvent(EntityUid.Invalid, new StationsGeneratedEvent(), broadcast: true); // TODO: attach this to a meaningful entity. } - private void GenerateDepots(List depotPrototypes, out List depotStations) - { - //For depots, we want them to fill a circular type dystance formula to try to keep them as far apart as possible - //Therefore, we will be taking our range properties and treating them as magnitudes of a direction vector divided - //by the number of depots set in our corresponding cvar - - depotStations = new List(); - var depotCount = _configurationManager.GetCVar(NFCCVars.CargoDepots); - var rotation = 2 * Math.PI / depotCount; - var rotationOffset = _random.NextAngle() / depotCount; - - for (int i = 0; i < depotCount && depotPrototypes.Count > 0; i++) - { - var proto = _random.Pick(depotPrototypes); - Vector2i offset = new Vector2i((int) (_random.Next(proto.MinimumDistance, proto.MaximumDistance) * _distanceOffset), 0); - offset = offset.Rotate(rotationOffset); - rotationOffset += rotation; - // Append letter to depot name. - - string overrideName = proto.Name; - if (i < 26) - overrideName += $" {(char) ('A' + i)}"; // " A" ... " Z" - else - overrideName += $" {i + 1}"; // " 27", " 28"... - if (TrySpawnPoiGrid(proto, offset, out var depotUid, overrideName: overrideName) && depotUid is { Valid: true } depot) - { - depotStations.Add(depot); - AddStationCoordsToSet(offset); // adjust list of actual station coords - } - } - } - - private void GenerateMarkets(List marketPrototypes, out List marketStations) - { - //For market stations, we are going to allow for a bit of randomness and a different offset configuration. We dont - //want copies of this one, since these can be more themed and duplicate names, for instance, can make for a less - //ideal world - - marketStations = new List(); - var marketCount = _configurationManager.GetCVar(NFCCVars.MarketStations); - _random.Shuffle(marketPrototypes); - int marketsAdded = 0; - foreach (var proto in marketPrototypes) - { - if (marketsAdded >= marketCount) - break; - - var offset = GetRandomPOICoord(proto.MinimumDistance, proto.MaximumDistance, true); - - if (TrySpawnPoiGrid(proto, offset, out var marketUid) && marketUid is { Valid: true } market) - { - marketStations.Add(market); - marketsAdded++; - AddStationCoordsToSet(offset); - } - } - } - - private void GenerateOptionals(List optionalPrototypes, out List optionalStations) - { - //Stations that do not have a defined grouping in their prototype get a default of "Optional" and get put into the - //generic random rotation of POIs. This should include traditional places like Tinnia's rest, the Science Lab, The Pit, - //and most RP places. This will essentially put them all into a pool to pull from, and still does not use the RNG function. - - optionalStations = new List(); - var optionalCount = _configurationManager.GetCVar(NFCCVars.OptionalStations); - _random.Shuffle(optionalPrototypes); - int optionalsAdded = 0; - foreach (var proto in optionalPrototypes) - { - if (optionalsAdded >= optionalCount) - break; - - var offset = GetRandomPOICoord(proto.MinimumDistance, proto.MaximumDistance, true); - - if (TrySpawnPoiGrid(proto, offset, out var optionalUid) && optionalUid is { Valid: true } uid) - { - optionalStations.Add(uid); - AddStationCoordsToSet(offset); - } - } - } - - private void GenerateRequireds(List requiredPrototypes, out List requiredStations) - { - //Stations are required are ones that are vital to function but otherwise still follow a generic random spawn logic - //Traditionally these would be stations like Expedition Lodge, NFSD station, Prison/Courthouse POI, etc. - //There are no limit to these, and any prototype marked alwaysSpawn = true will get pulled out of any list that isnt Markets/Depots - //And will always appear every time, and also will not be included in other optional/dynamic lists - - requiredStations = new List(); - foreach (var proto in requiredPrototypes) - { - var offset = GetRandomPOICoord(proto.MinimumDistance, proto.MaximumDistance, true); - - if (TrySpawnPoiGrid(proto, offset, out var requiredUid) && requiredUid is { Valid: true } uid) - { - requiredStations.Add(uid); - AddStationCoordsToSet(offset); - } - } - } - - private void GenerateUniques(Dictionary> uniquePrototypes, out List uniqueStations) - { - //Unique locations are semi-dynamic groupings of POIs that rely each independantly on the SpawnChance per POI prototype - //Since these are the remainder, and logically must have custom-designated groupings, we can then know to subdivide - //our random pool into these found groups. - //To do this with an equal distribution on a per-POI, per-round percentage basis, we are going to ensure a random - //pick order of which we analyze our weighted chances to spawn, and if successful, remove every entry of that group - //entirely. - - uniqueStations = new List(); - foreach (var prototypeList in uniquePrototypes.Values) - { - // Try to spawn - _random.Shuffle(prototypeList); - foreach (var proto in prototypeList) - { - var chance = _random.NextFloat(0, 1); - if (chance <= proto.SpawnChance) - { - var offset = GetRandomPOICoord(proto.MinimumDistance, proto.MaximumDistance, true); - - if (TrySpawnPoiGrid(proto, offset, out var optionalUid) && optionalUid is { Valid: true } uid) - { - uniqueStations.Add(uid); - AddStationCoordsToSet(offset); - break; - } - } - } - } - } - - private bool TrySpawnPoiGrid(PointOfInterestPrototype proto, Vector2 offset, out EntityUid? gridUid, string? overrideName = null) - { - gridUid = null; - if (_map.TryLoad(_mapId, proto.GridPath.ToString(), out var mapUids, - new MapLoadOptions - { - Offset = offset, - Rotation = _random.NextAngle() - })) - { - - string stationName = string.IsNullOrEmpty(overrideName) ? proto.Name : overrideName; - - EntityUid? stationUid = null; - if (_prototypeManager.TryIndex(proto.ID, out var stationProto)) - { - stationUid = _station.InitializeNewStation(stationProto.Stations[proto.ID], mapUids, stationName); - } - - foreach (var grid in mapUids) - { - var meta = EnsureComp(grid); - _meta.SetEntityName(grid, stationName, meta); - - EntityManager.AddComponents(grid, proto.AddComponents); - } - - // Rename warp points after set up if needed - if (proto.NameWarp) - { - bool? hideWarp = proto.HideWarp ? true : null; - if (stationUid != null) - _renameWarps.SyncWarpPointsToStation(stationUid.Value, forceAdminOnly: hideWarp); - else - _renameWarps.SyncWarpPointsToGrids(mapUids, forceAdminOnly: hideWarp); - } - - gridUid = mapUids[0]; - return true; - } - - return false; - } - - private Vector2 GetRandomPOICoord(float unscaledMinRange, float unscaledMaxRange, bool scaleRange) - { - int numRetries = int.Max(_configurationManager.GetCVar(NFCCVars.POIPlacementRetries), 0); - float minDistance = float.Max(_configurationManager.GetCVar(NFCCVars.MinPOIDistance), 0); // Constant at the end to avoid NaN weirdness - - Vector2 coords = _random.NextVector2(unscaledMinRange, unscaledMaxRange); - if (scaleRange) - coords *= _distanceOffset; - for (int i = 0; i < numRetries; i++) - { - bool positionIsValid = true; - foreach (var station in _stationCoords) - { - if (Vector2.Distance(station, coords) < minDistance) - { - positionIsValid = false; - break; - } - } - - // We have a valid position - if (positionIsValid) - break; - - // No vector yet, get next value. - coords = _random.NextVector2(unscaledMinRange, unscaledMaxRange); - if (scaleRange) - coords *= _distanceOffset; - } - - return coords; - } - - private void AddStationCoordsToSet(Vector2 coords) - { - _stationCoords.Add(coords); - } - private async Task ReportRound(string message, int color = 0x77DDE7) { Logger.InfoS("discord", message); diff --git a/Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs b/Content.Server/_NF/GameRule/PointOfInterestPrototype.cs similarity index 83% rename from Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs rename to Content.Server/_NF/GameRule/PointOfInterestPrototype.cs index b1b11cd5963..f29cf76474e 100644 --- a/Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs +++ b/Content.Server/_NF/GameRule/PointOfInterestPrototype.cs @@ -1,8 +1,8 @@ +using Content.Server.GameTicking.Presets; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; using Robust.Shared.Utility; -namespace Content.Shared._NF.GameRule; +namespace Content.Server._NF.GameRule; /// /// Describes information for a single point of interest to be spawned in the world @@ -11,7 +11,6 @@ namespace Content.Shared._NF.GameRule; [Serializable] public sealed partial class PointOfInterestPrototype : IPrototype { - /// [IdDataField] public string ID { get; private set; } = default!; @@ -22,13 +21,13 @@ public sealed partial class PointOfInterestPrototype : IPrototype public string Name { get; private set; } = ""; /// - /// Should we set the warppoint name based on the grid name. + /// Should we set the warppoint name based on the grid name. /// [DataField] public bool NameWarp { get; set; } = true; /// - /// If true, makes the warp point admin-only (hiding it for players). + /// If true, makes the warp point admin-only (hiding it for players). /// [DataField] public bool HideWarp { get; set; } = false; @@ -46,11 +45,17 @@ public sealed partial class PointOfInterestPrototype : IPrototype public int MaximumDistance { get; private set; } = 10000; /// - /// Components to be added to any spawned grids. + /// Components to be added to any spawned grids. /// [DataField] public ComponentRegistry AddComponents { get; set; } = new(); + /// + /// What gamepresets ID this POI is allowed to spawn on. + /// + [DataField] + public ProtoId[] SpawnGamePreset { get; private set; } = []; + /// /// If the POI does not belong to a pre-defined group, it will default to the "unique" internal category and will /// use this float from 0-1 as a raw chance to spawn each round. diff --git a/Content.Server/_NF/GameRule/PointOfInterestSystem.cs b/Content.Server/_NF/GameRule/PointOfInterestSystem.cs new file mode 100644 index 00000000000..d58a70b924a --- /dev/null +++ b/Content.Server/_NF/GameRule/PointOfInterestSystem.cs @@ -0,0 +1,299 @@ +using System.Linq; +using System.Numerics; +using Robust.Server.GameObjects; +using Robust.Server.Maps; +using Robust.Shared.Configuration; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Content.Server.Maps; +using Content.Server.Station.Systems; +using Content.Server.GameTicking; +using Content.Shared._NF.CCVar; +using Content.Shared.GameTicking; + +namespace Content.Server._NF.GameRule; + +/// +/// This handles the dungeon and trading post spawning, as well as round end capitalism summary +/// +//[Access(typeof(NfAdventureRuleSystem))] +public sealed class PointOfInterestSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly MapLoaderSystem _map = default!; + [Dependency] private readonly MetaDataSystem _meta = default!; + [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly StationRenameWarpsSystems _renameWarps = default!; + [Dependency] private readonly GameTicker _ticker = default!; + + private List _stationCoords = new(); + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRoundRestart); + } + + private void OnRoundRestart(RoundRestartCleanupEvent ev) + { + _stationCoords.Clear(); + } + + private void AddStationCoordsToSet(Vector2 coords) + { + _stationCoords.Add(coords); + } + + public void GenerateDepots(MapId mapUid, List depotPrototypes, out List depotStations) + { + //For depots, we want them to fill a circular type dystance formula to try to keep them as far apart as possible + //Therefore, we will be taking our range properties and treating them as magnitudes of a direction vector divided + //by the number of depots set in our corresponding cvar + + depotStations = new List(); + var depotCount = _configurationManager.GetCVar(NFCCVars.CargoDepots); + var rotation = 2 * Math.PI / depotCount; + var rotationOffset = _random.NextAngle() / depotCount; + + if (_ticker.CurrentPreset is null) + return; + + var currentPreset = _ticker.CurrentPreset.ID; + + for (int i = 0; i < depotCount && depotPrototypes.Count > 0; i++) + { + var proto = _random.Pick(depotPrototypes); + + if (!proto.SpawnGamePreset.Contains(currentPreset)) + continue; + + Vector2i offset = new Vector2i((int) _random.Next(proto.MinimumDistance, proto.MaximumDistance), 0); + offset = offset.Rotate(rotationOffset); + rotationOffset += rotation; + // Append letter to depot name. + + string overrideName = proto.Name; + if (i < 26) + overrideName += $" {(char)('A' + i)}"; // " A" ... " Z" + else + overrideName += $" {i + 1}"; // " 27", " 28"... + if (TrySpawnPoiGrid(mapUid, proto, offset, out var depotUid, overrideName: overrideName) && depotUid is { Valid: true } depot) + { + depotStations.Add(depot); + AddStationCoordsToSet(offset); // adjust list of actual station coords + } + } + } + + public void GenerateMarkets(MapId mapUid, List marketPrototypes, out List marketStations) + { + //For market stations, we are going to allow for a bit of randomness and a different offset configuration. We dont + //want copies of this one, since these can be more themed and duplicate names, for instance, can make for a less + //ideal world + + marketStations = new List(); + var marketCount = _configurationManager.GetCVar(NFCCVars.MarketStations); + _random.Shuffle(marketPrototypes); + int marketsAdded = 0; + + if (_ticker.CurrentPreset is null) + return; + var currentPreset = _ticker.CurrentPreset.ID; + + foreach (var proto in marketPrototypes) + { + if (!proto.SpawnGamePreset.Contains(currentPreset)) + continue; + + if (marketsAdded >= marketCount) + break; + + var offset = GetRandomPOICoord(proto.MinimumDistance, proto.MaximumDistance); + + if (TrySpawnPoiGrid(mapUid, proto, offset, out var marketUid) && marketUid is { Valid: true } market) + { + marketStations.Add(market); + marketsAdded++; + AddStationCoordsToSet(offset); + } + } + } + + public void GenerateOptionals(MapId mapUid, List optionalPrototypes, out List optionalStations) + { + //Stations that do not have a defined grouping in their prototype get a default of "Optional" and get put into the + //generic random rotation of POIs. This should include traditional places like Tinnia's rest, the Science Lab, The Pit, + //and most RP places. This will essentially put them all into a pool to pull from, and still does not use the RNG function. + + optionalStations = new List(); + var optionalCount = _configurationManager.GetCVar(NFCCVars.OptionalStations); + _random.Shuffle(optionalPrototypes); + int optionalsAdded = 0; + + if (_ticker.CurrentPreset is null) + return; + var currentPreset = _ticker.CurrentPreset.ID; + + foreach (var proto in optionalPrototypes) + { + if (!proto.SpawnGamePreset.Contains(currentPreset)) + continue; + + if (optionalsAdded >= optionalCount) + break; + + var offset = GetRandomPOICoord(proto.MinimumDistance, proto.MaximumDistance); + + if (TrySpawnPoiGrid(mapUid, proto, offset, out var optionalUid) && optionalUid is { Valid: true } uid) + { + optionalStations.Add(uid); + AddStationCoordsToSet(offset); + } + } + } + + public void GenerateRequireds(MapId mapUid, List requiredPrototypes, out List requiredStations) + { + //Stations are required are ones that are vital to function but otherwise still follow a generic random spawn logic + //Traditionally these would be stations like Expedition Lodge, NFSD station, Prison/Courthouse POI, etc. + //There are no limit to these, and any prototype marked alwaysSpawn = true will get pulled out of any list that isnt Markets/Depots + //And will always appear every time, and also will not be included in other optional/dynamic lists + + requiredStations = new List(); + + if (_ticker.CurrentPreset is null) + return; + var currentPreset = _ticker.CurrentPreset!.ID; + + foreach (var proto in requiredPrototypes) + { + if (!proto.SpawnGamePreset.Contains(currentPreset)) + continue; + + var offset = GetRandomPOICoord(proto.MinimumDistance, proto.MaximumDistance); + + if (TrySpawnPoiGrid(mapUid, proto, offset, out var requiredUid) && requiredUid is { Valid: true } uid) + { + requiredStations.Add(uid); + AddStationCoordsToSet(offset); + } + } + } + + public void GenerateUniques(MapId mapUid, Dictionary> uniquePrototypes, out List uniqueStations) + { + //Unique locations are semi-dynamic groupings of POIs that rely each independantly on the SpawnChance per POI prototype + //Since these are the remainder, and logically must have custom-designated groupings, we can then know to subdivide + //our random pool into these found groups. + //To do this with an equal distribution on a per-POI, per-round percentage basis, we are going to ensure a random + //pick order of which we analyze our weighted chances to spawn, and if successful, remove every entry of that group + //entirely. + + uniqueStations = new List(); + + if (_ticker.CurrentPreset is null) + return; + var currentPreset = _ticker.CurrentPreset!.ID; + + foreach (var prototypeList in uniquePrototypes.Values) + { + // Try to spawn + _random.Shuffle(prototypeList); + foreach (var proto in prototypeList) + { + if (!proto.SpawnGamePreset.Contains(currentPreset)) + continue; + + var chance = _random.NextFloat(0, 1); + if (chance <= proto.SpawnChance) + { + var offset = GetRandomPOICoord(proto.MinimumDistance, proto.MaximumDistance); + + if (TrySpawnPoiGrid(mapUid, proto, offset, out var optionalUid) && optionalUid is { Valid: true } uid) + { + uniqueStations.Add(uid); + AddStationCoordsToSet(offset); + break; + } + } + } + } + } + + private bool TrySpawnPoiGrid(MapId mapUid, PointOfInterestPrototype proto, Vector2 offset, out EntityUid? gridUid, string? overrideName = null) + { + gridUid = null; + if (_map.TryLoad(mapUid, proto.GridPath.ToString(), out var mapUids, + new MapLoadOptions + { + Offset = offset, + Rotation = _random.NextAngle() + })) + { + + string stationName = string.IsNullOrEmpty(overrideName) ? proto.Name : overrideName; + + EntityUid? stationUid = null; + if (_prototypeManager.TryIndex(proto.ID, out var stationProto)) + { + stationUid = _station.InitializeNewStation(stationProto.Stations[proto.ID], mapUids, stationName); + } + + foreach (var grid in mapUids) + { + var meta = EnsureComp(grid); + _meta.SetEntityName(grid, stationName, meta); + + EntityManager.AddComponents(grid, proto.AddComponents); + } + + // Rename warp points after set up if needed + if (proto.NameWarp) + { + bool? hideWarp = proto.HideWarp ? true : null; + if (stationUid != null) + _renameWarps.SyncWarpPointsToStation(stationUid.Value, forceAdminOnly: hideWarp); + else + _renameWarps.SyncWarpPointsToGrids(mapUids, forceAdminOnly: hideWarp); + } + + gridUid = mapUids[0]; + return true; + } + + return false; + } + + private Vector2 GetRandomPOICoord(float unscaledMinRange, float unscaledMaxRange) + { + int numRetries = int.Max(_configurationManager.GetCVar(NFCCVars.POIPlacementRetries), 0); + float minDistance = float.Max(_configurationManager.GetCVar(NFCCVars.MinPOIDistance), 0); // Constant at the end to avoid NaN weirdness + + Vector2 coords = _random.NextVector2(unscaledMinRange, unscaledMaxRange); + for (int i = 0; i < numRetries; i++) + { + bool positionIsValid = true; + foreach (var station in _stationCoords) + { + if (Vector2.Distance(station, coords) < minDistance) + { + positionIsValid = false; + break; + } + } + + // We have a valid position + if (positionIsValid) + break; + + // No vector yet, get next value. + coords = _random.NextVector2(unscaledMinRange, unscaledMaxRange); + } + + return coords; + } +} diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 6427dbbf734..790b77e1d11 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -163,7 +163,7 @@ public static readonly CVarDef /// Controls the default game preset. /// public static readonly CVarDef - GameLobbyDefaultPreset = CVarDef.Create("game.defaultpreset", "adventure", CVar.ARCHIVE); // Frontier: secret /// Controls if the game can force a different preset if the current preset's criteria are not met. diff --git a/Resources/Locale/en-US/_NF/adventure/adventure.ftl b/Resources/Locale/en-US/_NF/adventure/adventure.ftl index 3e1a1268163..9ee3991db5d 100644 --- a/Resources/Locale/en-US/_NF/adventure/adventure.ftl +++ b/Resources/Locale/en-US/_NF/adventure/adventure.ftl @@ -11,8 +11,12 @@ adventure-webhook-top-loss = lost a total of {$amount}. adventure-webhook-ledger-start = Ledger Summary -adventure-title = New Frontier Adventure Mode -adventure-description = Join a ship crew or buy your own and explore, research, salvage, or haul your way to riches! +nf-adventure-title = Adventure +nf-adventure-description = Join a ship crew or buy your own and explore, research, salvage, or haul your way to riches! + +nf-pirate-title = Pirates +nf-pirate-description = A gang of pirates is on the loose! Take care out in space and try not to get plundered! + currency = Spesos shipyard-rules-default1 = diff --git a/Resources/Prototypes/_NF/GameRules/roundstart.yml b/Resources/Prototypes/_NF/GameRules/roundstart.yml index 836fcc0a69b..a2214693626 100644 --- a/Resources/Prototypes/_NF/GameRules/roundstart.yml +++ b/Resources/Prototypes/_NF/GameRules/roundstart.yml @@ -1,9 +1,9 @@ - type: entity - id: Adventure + id: NFAdventure parent: BaseGameRule categories: [ HideSpawnMenu ] components: - - type: AdventureRule + - type: NFAdventureRule - type: entity id: BluespaceEventScheduler diff --git a/Resources/Prototypes/_NF/PointsOfInterest/anomalousgeode.yml b/Resources/Prototypes/_NF/PointsOfInterest/anomalousgeode.yml index b52fb814288..00644f0686e 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/anomalousgeode.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/anomalousgeode.yml @@ -13,6 +13,7 @@ name: 'Anomalous Geode' minimumDistance: 2100 maximumDistance: 3800 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: ScienceLab gridPath: /Maps/_NF/POI/anomalousgeode.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/anomalouslab.yml b/Resources/Prototypes/_NF/PointsOfInterest/anomalouslab.yml index b3c705241ce..6d6a37e5db0 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/anomalouslab.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/anomalouslab.yml @@ -1,6 +1,6 @@ # Author Info # GitHub: RealIHANOfficial (??) -# Discord: +# Discord: # Maintainer Info # GitHub: ??? @@ -13,6 +13,7 @@ name: 'Anomalous Lab' minimumDistance: 2100 maximumDistance: 3800 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: ScienceLab gridPath: /Maps/_NF/POI/anomalouslab.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/bahamamamas.yml b/Resources/Prototypes/_NF/PointsOfInterest/bahamamamas.yml index 9c89370ccc4..794d1c19e1f 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/bahamamamas.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/bahamamamas.yml @@ -13,6 +13,7 @@ name: "Bahama Mama's" minimumDistance: 1200 maximumDistance: 2900 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: RestStop gridPath: /Maps/_NF/POI/bahama.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/caseys.yml b/Resources/Prototypes/_NF/PointsOfInterest/caseys.yml index e4ff899c439..bad9005947c 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/caseys.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/caseys.yml @@ -1,5 +1,5 @@ # Author Info -# GitHub: +# GitHub: # Discord: Terezi (??) # Maintainer Info @@ -13,6 +13,7 @@ name: "Crazy Casey's Casino" minimumDistance: 3250 maximumDistance: 5600 + spawnGamePreset: [ NFAdventure, NFPirate ] gridPath: /Maps/_NF/POI/caseyscasino.yml addComponents: - type: IFF diff --git a/Resources/Prototypes/_NF/PointsOfInterest/courthouse.yml b/Resources/Prototypes/_NF/PointsOfInterest/courthouse.yml index e56ca7a0ff5..a35d46d3eda 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/courthouse.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/courthouse.yml @@ -7,12 +7,13 @@ # Discord: ??? # Notes: -# +# - type: pointOfInterest id: Courthouse name: "Courthouse" minimumDistance: 1150 maximumDistance: 2050 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: Required gridPath: /Maps/_NF/POI/courthouse.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/cove.yml b/Resources/Prototypes/_NF/PointsOfInterest/cove.yml index 3a6810a9a91..57bb4d1c336 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/cove.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/cove.yml @@ -13,6 +13,7 @@ name: Pirate Cove minimumDistance: 10000 maximumDistance: 15000 + spawnGamePreset: [ NFPirate ] spawnGroup: Required gridPath: /Maps/_NF/POI/cove.yml hideWarp: true diff --git a/Resources/Prototypes/_NF/PointsOfInterest/depots.yml b/Resources/Prototypes/_NF/PointsOfInterest/depots.yml index d46469c1348..0b8eae5b82c 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/depots.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/depots.yml @@ -13,6 +13,7 @@ name: Cargo Depot minimumDistance: 4500 maximumDistance: 6000 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: CargoDepot gridPath: /Maps/_NF/POI/cargodepot.yml addComponents: @@ -64,4 +65,4 @@ stationProto: MarketFrontierOutpost components: - type: StationNameSetup - mapNameTemplate: 'Cargo Depot' # Has a letter appended in NfAdventureSystem \ No newline at end of file + mapNameTemplate: 'Cargo Depot' # Has a letter appended in NfAdventureSystem diff --git a/Resources/Prototypes/_NF/PointsOfInterest/edison.yml b/Resources/Prototypes/_NF/PointsOfInterest/edison.yml index c06777fa9bb..04bbf80b51d 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/edison.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/edison.yml @@ -1,5 +1,5 @@ # Author Info -# GitHub: +# GitHub: # Discord: Checkraze # Maintainer Info @@ -7,14 +7,15 @@ # Discord: ??? # Notes: -# +# # - type: pointOfInterest # id: Edison # name: 'Edison Power Plant' # minimumDistance: 3650 # maximumDistance: 6400 + # spawnGamePreset: [ NFAdventure, NFPirate ] # spawnGroup: Required - # gridPath: /Maps/_NF/POI/edison.yml + # gridPath: /Maps/_NF/POI/edison.yml # addComponents: # - type: IFF # color: "#3737C8" @@ -38,4 +39,4 @@ # availableJobs: # Pilot: [ 0, 0 ] # Mercenary: [ 0, 0 ] - # Contractor: [ 0, 0 ] \ No newline at end of file + # Contractor: [ 0, 0 ] diff --git a/Resources/Prototypes/_NF/PointsOfInterest/grifty.yml b/Resources/Prototypes/_NF/PointsOfInterest/grifty.yml index 4b9d434f497..cb5fce22f97 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/grifty.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/grifty.yml @@ -1,5 +1,5 @@ # Author Info -# GitHub: +# GitHub: # Discord: ??? # Maintainer Info @@ -13,6 +13,7 @@ name: "Grifty's Gas n Grub" minimumDistance: 3250 maximumDistance: 5600 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: Scrapyard gridPath: /Maps/_NF/POI/grifty.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/lodge.yml b/Resources/Prototypes/_NF/PointsOfInterest/lodge.yml index b9d5ce3ebac..eb09273a2e4 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/lodge.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/lodge.yml @@ -13,6 +13,7 @@ name: 'Expeditionary Lodge' minimumDistance: 1650 maximumDistance: 3400 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: Required gridPath: /Maps/_NF/POI/lodge.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/lpbravo.yml b/Resources/Prototypes/_NF/PointsOfInterest/lpbravo.yml index 478b777968f..7f135395d5b 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/lpbravo.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/lpbravo.yml @@ -1,5 +1,5 @@ # Author Info -# GitHub: +# GitHub: # Discord: Checkraze # Maintainer Info @@ -13,6 +13,7 @@ name: 'Listening Point Bravo' minimumDistance: 4000 maximumDistance: 6000 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: SyndicateFOB gridPath: /Maps/_NF/POI/lpbravo.yml hideWarp: true @@ -39,4 +40,4 @@ mapNameTemplate: 'Listening Point Bravo' - type: StationJobs availableJobs: {} - - type: StationDeadDropHintExempt \ No newline at end of file + - type: StationDeadDropHintExempt diff --git a/Resources/Prototypes/_NF/PointsOfInterest/mchobo.yml b/Resources/Prototypes/_NF/PointsOfInterest/mchobo.yml index ef4b3ece947..aa6a3e70c2b 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/mchobo.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/mchobo.yml @@ -8,12 +8,13 @@ # Notes: # Dumping ground of broken dreams and broken ships. -# Based on the McCargo built by Dvir01 (https://github.com/dvir001) and ruined with drunken pride by Tych0. +# Based on the McCargo built by Dvir01 (https://github.com/dvir001) and ruined with drunken pride by Tych0. - type: pointOfInterest id: McHobo name: Derelict McCargo minimumDistance: 3250 maximumDistance: 5600 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: Scrapyard gridPath: /Maps/_NF/POI/mchobo.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/nfsd.yml b/Resources/Prototypes/_NF/PointsOfInterest/nfsd.yml index 09336a02ce0..d993915f438 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/nfsd.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/nfsd.yml @@ -13,6 +13,7 @@ name: 'NFSD Outpost' minimumDistance: 750 maximumDistance: 1000 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: Required gridPath: /Maps/_NF/POI/nfsd.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/northpole.yml b/Resources/Prototypes/_NF/PointsOfInterest/northpole.yml index 59324e7c148..47a9c84fc8b 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/northpole.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/northpole.yml @@ -1,5 +1,5 @@ # Author Info -# GitHub: +# GitHub: # Discord: Checkraze # Maintainer Info @@ -13,6 +13,7 @@ name: "The North Pole" minimumDistance: 2150 maximumDistance: 4850 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: Christmas spawnChance: 0 gridPath: /Maps/_NF/POI/northpole.yml @@ -23,4 +24,4 @@ flags: [HideLabel] - type: Shuttle angularDamping: 999999 - linearDamping: 999999 \ No newline at end of file + linearDamping: 999999 diff --git a/Resources/Prototypes/_NF/PointsOfInterest/omnichurch.yml b/Resources/Prototypes/_NF/PointsOfInterest/omnichurch.yml index 43a8df90949..8a0861058c2 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/omnichurch.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/omnichurch.yml @@ -7,12 +7,13 @@ # Discord: ??? # Notes: -# +# - type: pointOfInterest id: Omnichurch name: "Omnichurch Beacon" minimumDistance: 2200 maximumDistance: 4900 + spawnGamePreset: [ NFAdventure, NFPirate ] gridPath: /Maps/_NF/POI/beacon.yml addComponents: - type: IFF @@ -20,4 +21,4 @@ readOnly: true - type: Shuttle angularDamping: 999999 - linearDamping: 999999 \ No newline at end of file + linearDamping: 999999 diff --git a/Resources/Prototypes/_NF/PointsOfInterest/thepit.yml b/Resources/Prototypes/_NF/PointsOfInterest/thepit.yml index 80ceac9e771..8a13ec26b97 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/thepit.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/thepit.yml @@ -13,6 +13,7 @@ name: "The Pit" minimumDistance: 2200 maximumDistance: 4200 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: Arena gridPath: /Maps/_NF/POI/arena.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/tinniasrest.yml b/Resources/Prototypes/_NF/PointsOfInterest/tinniasrest.yml index 5ca2436ec0b..c7f48701a94 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/tinniasrest.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/tinniasrest.yml @@ -13,6 +13,7 @@ name: "Tinnia's Rest" minimumDistance: 1200 maximumDistance: 2900 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: RestStop gridPath: /Maps/_NF/POI/tinnia.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/trade.yml b/Resources/Prototypes/_NF/PointsOfInterest/trade.yml index 475cd67bf6a..555f321139b 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/trade.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/trade.yml @@ -13,6 +13,7 @@ name: Trade Outpost minimumDistance: 1500 maximumDistance: 2500 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: MarketStation gridPath: /Maps/_NF/POI/trade.yml addComponents: diff --git a/Resources/Prototypes/_NF/PointsOfInterest/trademall.yml b/Resources/Prototypes/_NF/PointsOfInterest/trademall.yml index 5c14ca2b5ae..9b7e75158fb 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/trademall.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/trademall.yml @@ -13,6 +13,7 @@ name: Trade Mall minimumDistance: 1500 maximumDistance: 2500 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: MarketStation gridPath: /Maps/_NF/POI/trademall.yml addComponents: diff --git a/Resources/Prototypes/_NF/game_presets.yml b/Resources/Prototypes/_NF/game_presets.yml index b87244e0a7f..6c39e92fdb9 100644 --- a/Resources/Prototypes/_NF/game_presets.yml +++ b/Resources/Prototypes/_NF/game_presets.yml @@ -1,12 +1,30 @@ - type: gamePreset - id: Adventure + id: NFAdventure alias: + - nfadventure - adventure - name: adventure-title - description: adventure-description - showInVote: false + name: nf-adventure-title + description: nf-adventure-description + showInVote: true rules: - - Adventure + - NFAdventure + - BasicStationEventScheduler + - BluespaceEventScheduler + - BluespaceDungeonEventScheduler + - BluespaceSalvageEventScheduler + - SmugglingEventScheduler + - FrontierRoundstartVariation + +- type: gamePreset + id: NFPirate + alias: + - nfpirate + - pirate + name: nf-pirate-title + description: nf-pirate-description + showInVote: true + rules: + - NFAdventure - BasicStationEventScheduler - BluespaceEventScheduler - BluespaceDungeonEventScheduler diff --git a/Resources/Prototypes/game_presets.yml b/Resources/Prototypes/game_presets.yml index 945b4a8c83b..ad66624f7f5 100644 --- a/Resources/Prototypes/game_presets.yml +++ b/Resources/Prototypes/game_presets.yml @@ -91,7 +91,7 @@ showInVote: false #4boring4vote description: greenshift-description rules: - - SpaceTrafficControlFriendlyEventScheduler + - SpaceTrafficControlFriendlyEventScheduler - BasicRoundstartVariation - type: gamePreset @@ -100,7 +100,7 @@ - secret - sekrit name: secret-title - showInVote: true + showInVote: false # Frontier: true < false description: secret-description rules: - Secret @@ -126,7 +126,7 @@ showInVote: false #Admin Use description: secret-description rules: - - SpaceTrafficControlFriendlyEventScheduler + - SpaceTrafficControlFriendlyEventScheduler - BasicRoundstartVariation - type: gamePreset @@ -164,7 +164,7 @@ name: death-match-title description: death-match-description maxPlayers: 15 - showInVote: true + showInVote: false # Frontier: true < false supportedMaps: DeathMatchMapPool rules: - DeathMatch31 @@ -233,4 +233,4 @@ - BasicStationEventScheduler - KesslerSyndromeScheduler - SpaceTrafficControlEventScheduler - - BasicRoundstartVariation \ No newline at end of file + - BasicRoundstartVariation From 67e2b5214ff8fb1f9708899c6d3e83af944f8761 Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Tue, 24 Dec 2024 02:50:45 +0200 Subject: [PATCH 08/20] Fixed LinkedLifecycleGridParent to events (#2604) --- .../Prototypes/_NF/Events/nf_bluespace_grids_events.yml | 8 ++++++++ .../Prototypes/_NF/Events/nf_bluespace_salvage_events.yml | 1 + 2 files changed, 9 insertions(+) diff --git a/Resources/Prototypes/_NF/Events/nf_bluespace_grids_events.yml b/Resources/Prototypes/_NF/Events/nf_bluespace_grids_events.yml index a618212d320..9ff65d1e4bf 100644 --- a/Resources/Prototypes/_NF/Events/nf_bluespace_grids_events.yml +++ b/Resources/Prototypes/_NF/Events/nf_bluespace_grids_events.yml @@ -31,6 +31,7 @@ - type: Shuttle angularDamping: 999999 linearDamping: 999999 + - type: LinkedLifecycleGridParent paths: - /Maps/_NF/Bluespace/cache.yml rewardAccounts: @@ -69,6 +70,7 @@ - type: Shuttle angularDamping: 999999 linearDamping: 999999 + - type: LinkedLifecycleGridParent paths: - /Maps/_NF/Bluespace/vault.yml rewardAccounts: @@ -108,6 +110,7 @@ - type: Shuttle angularDamping: 999999 linearDamping: 999999 + - type: LinkedLifecycleGridParent paths: - /Maps/_NF/Bluespace/vaultsmall.yml rewardAccounts: @@ -145,6 +148,7 @@ - type: Shuttle angularDamping: 999999 linearDamping: 999999 + - type: LinkedLifecycleGridParent paths: - /Maps/_NF/Bluespace/syndieftlintercept.yml @@ -180,6 +184,7 @@ - type: Shuttle angularDamping: 999999 linearDamping: 999999 + - type: LinkedLifecycleGridParent paths: - /Maps/_NF/Bluespace/wizardprobealt.yml @@ -215,6 +220,7 @@ - type: Shuttle angularDamping: 999999 linearDamping: 999999 + - type: LinkedLifecycleGridParent paths: - /Maps/_NF/Bluespace/bloodmoon.yml @@ -248,6 +254,7 @@ - type: Shuttle angularDamping: 999999 linearDamping: 999999 + - type: LinkedLifecycleGridParent paths: - /Maps/_NF/Bluespace/cave.yml @@ -278,5 +285,6 @@ maximumDistance: 2500 addComponents: - type: IFF + - type: LinkedLifecycleGridParent paths: - /Maps/_NF/Bluespace/mcevent.yml diff --git a/Resources/Prototypes/_NF/Events/nf_bluespace_salvage_events.yml b/Resources/Prototypes/_NF/Events/nf_bluespace_salvage_events.yml index c357c8a6218..bd126439dfc 100644 --- a/Resources/Prototypes/_NF/Events/nf_bluespace_salvage_events.yml +++ b/Resources/Prototypes/_NF/Events/nf_bluespace_salvage_events.yml @@ -26,6 +26,7 @@ addComponents: - type: IFF color: "#AAAAAA" + - type: LinkedLifecycleGridParent paths: - /Maps/_NF/Shuttles/Scrap/bison.yml # - /Maps/_NF/Shuttles/Scrap/canister.yml # Too small From 321f2b747b2e465b6e20673caf5a3eedd3a553bd Mon Sep 17 00:00:00 2001 From: chrome-cirrus <95361+chrome-cirrus@users.noreply.github.com> Date: Tue, 24 Dec 2024 23:38:27 +0100 Subject: [PATCH 09/20] Add a bucket and mop slot to the Janicart (#2568) * Initial commit * Couple component tweaks, switch from vanilla to new version for spawners, crates. Add migration line. * Add version with keys, flatpack, and research path for Janicart * Suffixes -> Prefixes. Rename research target. * More slots. Remove from cargo menu * Set abstract true on cargo entry rather than delete * Adopt suggestions from whatston3 * Tweak values of Janicart + flatpack * Equalize prices, fix Guidebook error --- .../en-US/_NF/research/technologies.ftl | 3 +- .../Entities/Markers/Spawners/vehicles.yml | 8 +- .../Entities/Objects/Vehicles/buckleable.yml | 1 + .../Entities/Structures/Machines/lathe.yml | 1 + .../_NF/Catalog/Cargo/cargo_service.yml | 1 + .../_NF/Catalog/Fills/Crates/service.yml | 2 +- .../Entities/Objects/Devices/flatpacks.yml | 11 ++ .../Entities/Objects/Vehicles/vehicles.yml | 142 ++++++++++++++++++ .../Entities/Structures/Machines/lathe.yml | 1 + .../Prototypes/_NF/Recipes/Lathes/misc.yml | 9 ++ .../_NF/Research/civilianservices.yml | 12 ++ .../Guidebook/Service/Janitorial.xml | 2 +- Resources/_NF/migration.yml | 5 +- Resources/migration.yml | 2 + 14 files changed, 192 insertions(+), 8 deletions(-) diff --git a/Resources/Locale/en-US/_NF/research/technologies.ftl b/Resources/Locale/en-US/_NF/research/technologies.ftl index 5822f98b35a..21d62eeeb52 100644 --- a/Resources/Locale/en-US/_NF/research/technologies.ftl +++ b/Resources/Locale/en-US/_NF/research/technologies.ftl @@ -13,4 +13,5 @@ research-technology-bounty-hunting = Bounty Hunting research-technology-arsenal-style = Punk Gear research-technology-industrial-medicine = Industrial Medicine research-technology-magnets-tech-advanced = Advanced Localized Magnetism -research-technology-magnets-tech-combat = Localized Magnetism Combat Application \ No newline at end of file +research-technology-magnets-tech-combat = Localized Magnetism Combat Application +research-technology-mobile-sanitation = Mobile Sanitation diff --git a/Resources/Prototypes/Entities/Markers/Spawners/vehicles.yml b/Resources/Prototypes/Entities/Markers/Spawners/vehicles.yml index d9309d51e7d..8ffba5a01a5 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/vehicles.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/vehicles.yml @@ -24,7 +24,7 @@ state: keys - type: ConditionalSpawner prototypes: - - VehicleJanicart + - NFVehicleJanicart # Frontier: add NF prefix - type: entity name: ATV Spawner @@ -38,7 +38,7 @@ state: keys - type: ConditionalSpawner prototypes: - - VehicleATVNF # Frontier + - VehicleATVNF # Frontier: add NF suffix - type: entity name: Motobike Spawner @@ -52,7 +52,7 @@ state: keys - type: ConditionalSpawner prototypes: - - VehicleSkeletonMotorcycleNF # Frontier + - VehicleSkeletonMotorcycleNF # Frontier: add NF suffix - type: entity name: Wheelchair Spawner @@ -80,4 +80,4 @@ state: vehicle_folded - type: ConditionalSpawner prototypes: - - VehicleWheelchairFolded \ No newline at end of file + - VehicleWheelchairFolded diff --git a/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml b/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml index c0dc2b5ba46..9ab61acc4d2 100644 --- a/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml +++ b/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml @@ -89,6 +89,7 @@ parent: BaseVehicleRideable name: janicart description: The janitor's trusty steed. + abstract: true # Frontier components: - type: Vehicle southOver: true diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 81cb8b9722b..b88f4904de5 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -406,6 +406,7 @@ - ConstructionBagOfHolding # Frontier - ServiceSelectiveDropper # Frontier - PlantAnalyzer # Frontier + - JanicartFlatpack # Frontier - type: EmagLatheRecipes emagDynamicRecipes: - BoxBeanbag diff --git a/Resources/Prototypes/_NF/Catalog/Cargo/cargo_service.yml b/Resources/Prototypes/_NF/Catalog/Cargo/cargo_service.yml index 2a9b0df5e60..d471a927a03 100644 --- a/Resources/Prototypes/_NF/Catalog/Cargo/cargo_service.yml +++ b/Resources/Prototypes/_NF/Catalog/Cargo/cargo_service.yml @@ -20,6 +20,7 @@ - type: cargoProduct id: ServiceVehicleJanicart + abstract: true icon: sprite: Objects/Vehicles/janicart.rsi state: icon diff --git a/Resources/Prototypes/_NF/Catalog/Fills/Crates/service.yml b/Resources/Prototypes/_NF/Catalog/Fills/Crates/service.yml index 95d5db560b3..51c472147f9 100644 --- a/Resources/Prototypes/_NF/Catalog/Fills/Crates/service.yml +++ b/Resources/Prototypes/_NF/Catalog/Fills/Crates/service.yml @@ -20,5 +20,5 @@ components: - type: StorageFill contents: - - id: VehicleJanicart + - id: NFVehicleJanicart - id: VehicleKeyJanicart diff --git a/Resources/Prototypes/_NF/Entities/Objects/Devices/flatpacks.yml b/Resources/Prototypes/_NF/Entities/Objects/Devices/flatpacks.yml index 13d1ace68b4..428b5ba384d 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Devices/flatpacks.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Devices/flatpacks.yml @@ -879,6 +879,17 @@ - type: StaticPrice price: 750 +- type: entity + parent: BaseNFFlatpack + id: JanicartFlatpack + name: janicart flatpack + description: A flatpack used for constructing a Janicart. Keys already slotted in the ignition. Mop sold separately. + components: + - type: Flatpack + entity: NFVehicleJanicartKey + - type: StaticPrice + price: 375 # 1.25 * base value of input materials + # Vendomats - type: entity parent: UniformPrinterFlatpack diff --git a/Resources/Prototypes/_NF/Entities/Objects/Vehicles/vehicles.yml b/Resources/Prototypes/_NF/Entities/Objects/Vehicles/vehicles.yml index 877240261c7..7554d0c970f 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Vehicles/vehicles.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Vehicles/vehicles.yml @@ -183,6 +183,148 @@ params: volume: -3 +# Enhanced version of the vanilla Janicart that adds a bucket and mop slot. +- type: entity + id: NFVehicleJanicart + parent: VehicleJanicart + components: + - type: ItemSlots + slots: + key_slot: + name: vehicle-slot-component-slot-name-keys + whitelist: + requireAll: true + tags: + - VehicleKey + - JanicartKeys + insertSound: + path: /Audio/Effects/Vehicle/vehiclestartup.ogg + params: + volume: -3 + priority: 10 + mop_slot: &mopSlot + name: janitorial-trolley-slot-component-slot-name-mop + whitelist: + tags: + - Mop + insertOnInteract: false # or it conflicts with bucket logic + priority: 9 # Higher than bucket slot + plunger_slot: &plungerSlot + name: janitorial-trolley-slot-component-slot-name-plunger + whitelist: + tags: + - Plunger + priority: 8 + wetfloorsign_slot4: &wetFloorSignSlot + name: janitorial-trolley-slot-component-slot-name-sign + whitelist: + tags: + - WetFloorSign + priority: 7 + wetfloorsign_slot3: *wetFloorSignSlot + wetfloorsign_slot2: *wetFloorSignSlot + wetfloorsign_slot1: *wetFloorSignSlot + lightreplacer_slot: &lightReplacerSlot + name: janitorial-trolley-slot-component-slot-name-lightreplacer + whitelist: + components: + - LightReplacer + priority: 6 + spraybottle_slot: &sprayBottleSlot + name: janitorial-trolley-slot-component-slot-name-spray + whitelist: + tags: + - Spray + insertOnInteract: false # or it conflicts with bucket logic + priority: 5 # Higher than bucket slot + bucket_slot: &bucketSlot + name: janitorial-trolley-slot-component-slot-name-bucket + whitelist: + tags: + - Bucket + insertOnInteract: false # or it also conflicts with bucket logic + priority: 4 # Higher than trash bag slot + trashbag_slot: &trashBagSlot + name: janitorial-trolley-slot-component-slot-name-trashbag + whitelist: + tags: + - TrashBag + priority: 3 # Higher than drinking priority + - type: ItemMapper + mapLayers: + storage: + whitelist: + tags: + - TrashBag + sprite: Objects/Vehicles/janicart.rsi + - type: Appearance + - type: Spillable + solution: bucket + spillDelay: 3.0 + spillWhenThrown: false + - type: SolutionContainerManager + solutions: + bucket: + maxVol: 800 + - type: DrainableSolution + solution: bucket + - type: RefillableSolution + solution: bucket + - type: ExaminableSolution + solution: bucket + - type: Tag + tags: + - Wringer + - type: Drink + solution: bucket + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + mop_slot: !type:ContainerSlot {} + plunger_slot: !type:ContainerSlot {} + wetfloorsign_slot4: !type:ContainerSlot {} + wetfloorsign_slot3: !type:ContainerSlot {} + wetfloorsign_slot2: !type:ContainerSlot {} + wetfloorsign_slot1: !type:ContainerSlot {} + lightreplacer_slot: !type:ContainerSlot {} + spraybottle_slot: !type:ContainerSlot {} + bucket_slot: !type:ContainerSlot {} + trashbag_slot: !type:ContainerSlot {} + - type: StaticPrice + price: 375 # Same as flatpack + +- type: entity + parent: NFVehicleJanicart + id: NFVehicleJanicartKey + suffix: With key + components: + - type: ItemSlots + slots: + key_slot: + name: vehicle-slot-component-slot-name-keys + whitelist: + requireAll: true + tags: + - VehicleKey + - JanicartKeys + startingItem: VehicleKeyJanicart + insertSound: + path: /Audio/Effects/Vehicle/vehiclestartup.ogg + params: + volume: -3 + priority: 9 + mop_slot: *mopSlot + plunger_slot: *plungerSlot + wetfloorsign_slot4: *wetFloorSignSlot + wetfloorsign_slot3: *wetFloorSignSlot + wetfloorsign_slot2: *wetFloorSignSlot + wetfloorsign_slot1: *wetFloorSignSlot + lightreplacer_slot: *lightReplacerSlot + spraybottle_slot: *sprayBottleSlot + bucket_slot: *bucketSlot + trashbag_slot: *trashBagSlot + # Mail carrier - type: entity parent: VehicleSkeletonMotorcycleNF diff --git a/Resources/Prototypes/_NF/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/_NF/Entities/Structures/Machines/lathe.yml index 0cb1218de5f..d6a9f857edb 100644 --- a/Resources/Prototypes/_NF/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/_NF/Entities/Structures/Machines/lathe.yml @@ -268,6 +268,7 @@ - SyringeBluespace - PlantBagOfHolding - PlantAnalyzer + - JanicartFlatpack - type: EmagLatheRecipes emagStaticRecipes: - NFHappyHonkNukieEmpty diff --git a/Resources/Prototypes/_NF/Recipes/Lathes/misc.yml b/Resources/Prototypes/_NF/Recipes/Lathes/misc.yml index 240e084ac2c..83021656e99 100644 --- a/Resources/Prototypes/_NF/Recipes/Lathes/misc.yml +++ b/Resources/Prototypes/_NF/Recipes/Lathes/misc.yml @@ -146,3 +146,12 @@ id: ColoredLightTubeFrostyBlueNF result: ColoredLightTubeFrostyBlue parent: NFBaseLightTubeRecipe + +- type: latheRecipe + id: JanicartFlatpack + result: JanicartFlatpack + materials: + Steel: 2000 + Glass: 1000 + Plastic: 800 + Uranium: 250 diff --git a/Resources/Prototypes/_NF/Research/civilianservices.yml b/Resources/Prototypes/_NF/Research/civilianservices.yml index e552f23a17d..c0c1830c70c 100644 --- a/Resources/Prototypes/_NF/Research/civilianservices.yml +++ b/Resources/Prototypes/_NF/Research/civilianservices.yml @@ -38,3 +38,15 @@ - ServiceSelectiveDropper - KitchenAssemblerMachineCircuitboard - ElectricRangeMachineCircuitboard + +- type: technology + id: MobileSanitation + name: research-technology-mobile-sanitation + icon: + sprite: Objects/Vehicles/janicart.rsi + state: icon + discipline: CivilianServices + tier: 2 + cost: 5000 + recipeUnlocks: + - JanicartFlatpack diff --git a/Resources/ServerInfo/Guidebook/Service/Janitorial.xml b/Resources/ServerInfo/Guidebook/Service/Janitorial.xml index e715fe919f7..2843c197672 100644 --- a/Resources/ServerInfo/Guidebook/Service/Janitorial.xml +++ b/Resources/ServerInfo/Guidebook/Service/Janitorial.xml @@ -20,7 +20,7 @@ You keep things clean, it's a rough job sometimes, but someone's gotta do it. Th ## Additional Equipment - + diff --git a/Resources/_NF/migration.yml b/Resources/_NF/migration.yml index 51d4980573f..08df7cb5dee 100644 --- a/Resources/_NF/migration.yml +++ b/Resources/_NF/migration.yml @@ -171,5 +171,8 @@ NFPosterContrabandEmsCoordsDD: NFPosterContrabandEmsCoords # 2024-12-09 Wreck RandomItem: null +# 2024-12-14 +VehicleJanicart: NFVehicleJanicart + # 2024-12-22 Barrels -CrateSpaceCleaner: ChemicalBarrelSpaceCleaner \ No newline at end of file +CrateSpaceCleaner: ChemicalBarrelSpaceCleaner diff --git a/Resources/migration.yml b/Resources/migration.yml index 39e8d54bf1d..e394d3aa118 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -440,3 +440,5 @@ BlueprintFlare: null # 2024-10-04 BaseAdvancedPen: Pen + +# Frontier: put Frontier-related migrations in _NF/migration.yml. Thank you. From 626515dfd3235c9db05630509caa0e191a378f67 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Tue, 24 Dec 2024 22:38:52 +0000 Subject: [PATCH 10/20] Automatic Changelog (#2568) --- Resources/Changelog/Frontier.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 3b8cffce1e6..a538a044fa9 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -6065,3 +6065,16 @@ Entries: message: The ChefVend now contains one jar of each oil. id: 5607 time: '2024-12-21T23:06:11.0000000+00:00' +- author: chrome-cirrus + changes: + - type: Tweak + message: >- + Add slots to the Janicart vehicle to give it feature parity with the + janitor trolley and make things more convenient for practicioners of the + janitorial arts + - type: Add + message: Research target that unlocks crafting of Janicart flatpacks + - type: Remove + message: Janicart crates no longer purchaseable at cargo + id: 5608 + time: '2024-12-24T22:38:28.0000000+00:00' From 6242d7db9431e61926d420a65426a88d5b2e5ca5 Mon Sep 17 00:00:00 2001 From: Alkheemist Date: Wed, 25 Dec 2024 09:48:18 +1100 Subject: [PATCH 11/20] Add an Alt verb to handicomms, to allow more convenient toggling (#2590) * Added alt verb to toggle handicomms * remove extraneous conditional on the alt verb * Comment alt verb subscription * RadioDeviceSystem: check intercom access, state --------- Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com> Co-authored-by: Whatstone Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com> --- .../Radio/EntitySystems/RadioDeviceSystem.cs | 41 +++++++++++++++++++ .../components/handheld-radio-component.ftl | 5 ++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs index 77a31074a62..42eec583f81 100644 --- a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs @@ -18,6 +18,8 @@ using Robust.Server.GameObjects; // Nuclear-14 using Robust.Shared.Prototypes; using Content.Shared.Access.Systems; // Frontier +using Content.Shared.Verbs; //Frontier +using Robust.Shared.Utility; //Frontier namespace Content.Server.Radio.EntitySystems; @@ -51,6 +53,7 @@ public override void Initialize() SubscribeLocalEvent(OnListen); SubscribeLocalEvent(OnAttemptListen); SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent>(OnGetAltVerbs); // Frontier SubscribeLocalEvent(OnSpeakerInit); SubscribeLocalEvent(OnActivateSpeaker); @@ -366,6 +369,44 @@ private void UpdateHandheldRadioUi(Entity radio) #endregion // Nuclear-14-End + // Frontier Start + /// + /// Adds an alt verb allowing for the mic to be toggled easily. + /// + private void OnGetAltVerbs(EntityUid uid, RadioMicrophoneComponent microphone, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + AlternativeVerb verb = new() + { + Text = Loc.GetString("handheld-radio-component-toggle"), + Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/settings.svg.192dpi.png")), + Act = () => ToggleRadioOrIntercomMic(uid, microphone, args.User) + }; + args.Verbs.Add(verb); + } + + /// + /// A mic toggle for both radios and intercoms. + /// + private void ToggleRadioOrIntercomMic(EntityUid uid, RadioMicrophoneComponent microphone, EntityUid user) + { + if (!_access.IsAllowed(user, uid)) + return; + if (microphone.PowerRequired && !this.IsPowered(uid, EntityManager)) + return; + + ToggleRadioMicrophone(uid, user, false, microphone); + if (TryComp(uid, out var intercom)) + { + intercom.MicrophoneEnabled = microphone.Enabled; + Dirty((uid, intercom)); + } + } + // Frontier End + + // Frontier: init intercom with map private void OnMapInit(EntityUid uid, IntercomComponent ent, MapInitEvent args) { diff --git a/Resources/Locale/en-US/radio/components/handheld-radio-component.ftl b/Resources/Locale/en-US/radio/components/handheld-radio-component.ftl index ad637b0c56d..1933c19a935 100644 --- a/Resources/Locale/en-US/radio/components/handheld-radio-component.ftl +++ b/Resources/Locale/en-US/radio/components/handheld-radio-component.ftl @@ -5,10 +5,13 @@ handheld-radio-component-off-state = off handheld-radio-component-channel-set = Channel set to {$channel} handheld-radio-component-chennel-examine = The current channel is {$channel}. +# Frontier +handheld-radio-component-toggle = Toggle Mic + # Nuclear-14-Start handheld-radio-menu-title = Handheld radio handheld-radio-current-text-frequency = Broadcast frequency handheld-radio-button-text-mic = Mic. handheld-radio-button-text-speaker = Spkr. handheld-radio-flavor-text-left = HandiComms, 1000-3000 kHz -# Nuclear-14-End \ No newline at end of file +# Nuclear-14-End From 3941232dd35b6ce9e64f1ca2e7cf1d42464e3187 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Tue, 24 Dec 2024 22:48:42 +0000 Subject: [PATCH 12/20] Automatic Changelog (#2590) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index a538a044fa9..457f28fe6bd 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -6078,3 +6078,9 @@ Entries: message: Janicart crates no longer purchaseable at cargo id: 5608 time: '2024-12-24T22:38:28.0000000+00:00' +- author: Alkheemist + changes: + - type: Tweak + message: Handicomm mics can now be toggled with an alt-click + id: 5609 + time: '2024-12-24T22:48:18.0000000+00:00' From 506679f7631304c349cb644cc5101d81495384b2 Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Tue, 24 Dec 2024 18:05:02 -0500 Subject: [PATCH 13/20] PTK Rework (#2521) * PTK changes: proof of concept * Add hard rock ores for other asteroids than ice * IconSmoothSystem: reduce redundnacy * add NF prefix to OreDiamondDense refs * Fix salvage.yml merge issues * No duped crate spawner * PTK-1500e, not 3000e * Fix asteroid scrap spawner parenting * PTK description * Add "overpowered" comment on PTK * Create supercompacted.yml * Added super compacted spawners * Update supercompacted.yml * mineral spawners * undupe spawners * Separate mineral tables out from floorplan * Fix scrap mineral table * WIP: add RoomMarkers * minerals to spawners, fix rock dupe * Fix missing ice spawner ref * Sprites for mineral spawns, hard supercomp. spawns * rich hard mineral spawners * fewer diamonds on andesite, more chunk spawners * More frequent clusters * order of magnitude --------- Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com> Co-authored-by: Dvir --- .../IconSmoothing/IconSmoothSystem.cs | 30 +- .../Gatherable/GatherableSystem.Projectile.cs | 16 + Content.Server/Mining/MiningSystem.cs | 5 + .../MiningGatheringHardComponent.cs | 7 + .../MiningGatheringSoftComponent.cs | 7 + .../Mining/Components/OreVeinComponent.cs | 13 + .../Weapons/Reflect/ReflectComponent.cs | 3 +- Resources/Maps/_NF/Bluespace/cave.yml | 314 +- Resources/Maps/_NF/Dungeon/supercompacted.yml | 3348 +++++++++++++++++ .../Devices/Circuitboards/Machine/cannons.yml | 4 +- .../Weapons/Guns/Projectiles/projectiles.yml | 18 +- .../Entities/Objects/Weapons/Melee/mining.yml | 1 + .../Entities/Structures/Shuttles/cannons.yml | 4 +- .../Entities/Structures/Walls/asteroid.yml | 196 +- .../Spawners/Random/Salvage/minerals.yml | 1016 +++++ .../Markers/Spawners/Random/salvage.yml | 258 +- .../Entities/Objects/Devices/flatpacks.yml | 4 +- .../Objects/Weapons/Melee/e_sword.yml | 2 + .../Entities/Structures/Walls/asteroid.yml | 193 +- .../_NF/Entities/Structures/Walls/walls.yml | 3295 +++++++++++++++- .../_NF/Entities/World/Debris/asteroids.yml | 435 +-- .../_NF/Procedural/Themes/supercompacted.yml | 517 +++ .../_NF/Procedural/basalt_vgroid.yml | 2 +- .../Prototypes/_NF/Procedural/cave_vgroid.yml | 2 +- .../_NF/Procedural/chromite_vgroid.yml | 2 +- .../Prototypes/_NF/Procedural/snow_vgroid.yml | 2 +- Resources/Prototypes/_NF/ore.yml | 118 +- Resources/Prototypes/_NF/tags.yml | 23 +- 28 files changed, 9055 insertions(+), 780 deletions(-) create mode 100644 Content.Server/_NF/Gatherable/Components/MiningGatheringHardComponent.cs create mode 100644 Content.Server/_NF/Gatherable/Components/MiningGatheringSoftComponent.cs create mode 100644 Resources/Maps/_NF/Dungeon/supercompacted.yml create mode 100644 Resources/Prototypes/_NF/Entities/Markers/Spawners/Random/Salvage/minerals.yml create mode 100644 Resources/Prototypes/_NF/Procedural/Themes/supercompacted.yml diff --git a/Content.Client/IconSmoothing/IconSmoothSystem.cs b/Content.Client/IconSmoothing/IconSmoothSystem.cs index 2715805e758..d6afbc42cb4 100644 --- a/Content.Client/IconSmoothing/IconSmoothSystem.cs +++ b/Content.Client/IconSmoothing/IconSmoothSystem.cs @@ -81,21 +81,25 @@ public void SetStateBase(EntityUid uid, IconSmoothComponent component, string ne private void SetCornerLayers(SpriteComponent sprite, IconSmoothComponent component) { - sprite.LayerMapRemove(CornerLayers.SE); - sprite.LayerMapRemove(CornerLayers.NE); - sprite.LayerMapRemove(CornerLayers.NW); - sprite.LayerMapRemove(CornerLayers.SW); - + // Frontier: Allow overlays on entities using CornerLayers smoothing - don't remove layers, adjust existing ones or create new ones. var state0 = $"{component.StateBase}0"; - sprite.LayerMapSet(CornerLayers.SE, sprite.AddLayerState(state0)); - sprite.LayerSetDirOffset(CornerLayers.SE, DirectionOffset.None); - sprite.LayerMapSet(CornerLayers.NE, sprite.AddLayerState(state0)); - sprite.LayerSetDirOffset(CornerLayers.NE, DirectionOffset.CounterClockwise); - sprite.LayerMapSet(CornerLayers.NW, sprite.AddLayerState(state0)); - sprite.LayerSetDirOffset(CornerLayers.NW, DirectionOffset.Flip); - sprite.LayerMapSet(CornerLayers.SW, sprite.AddLayerState(state0)); - sprite.LayerSetDirOffset(CornerLayers.SW, DirectionOffset.Clockwise); + SetCornerLayerState(sprite, CornerLayers.SE, DirectionOffset.None, state0); + SetCornerLayerState(sprite, CornerLayers.NE, DirectionOffset.CounterClockwise, state0); + SetCornerLayerState(sprite, CornerLayers.NW, DirectionOffset.Flip, state0); + SetCornerLayerState(sprite, CornerLayers.SW, DirectionOffset.Clockwise, state0); + // End Frontier: Allow overlays on entities using CornerLayers smoothing - don't remove layers, adjust existing ones or create new ones. + } + + // Frontier: set layer function to remove redundancy + private void SetCornerLayerState(SpriteComponent sprite, CornerLayers corner, DirectionOffset offset, string state) + { + if (sprite.LayerMapTryGet(corner, out var layer)) + sprite.LayerSetState(layer, state); + else + sprite.LayerMapSet(corner, sprite.AddLayerState(state)); + sprite.LayerSetDirOffset(corner, offset); } + // End Frontier: set layer function to remove redundancy private void OnShutdown(EntityUid uid, IconSmoothComponent component, ComponentShutdown args) { diff --git a/Content.Server/Gatherable/GatherableSystem.Projectile.cs b/Content.Server/Gatherable/GatherableSystem.Projectile.cs index 3ab8872fd7d..df4c6122f4d 100644 --- a/Content.Server/Gatherable/GatherableSystem.Projectile.cs +++ b/Content.Server/Gatherable/GatherableSystem.Projectile.cs @@ -1,4 +1,5 @@ using Content.Server.Gatherable.Components; +using Content.Shared.Mining.Components; using Content.Shared.Projectiles; using Robust.Shared.Physics.Events; @@ -21,6 +22,21 @@ private void OnProjectileCollide(Entity gathering, return; } + // Frontier: gathering changes + // bad gatherer - not strong enough + if (_whitelistSystem.IsWhitelistFail(gatherable.ToolWhitelist, gathering.Owner)) + { + QueueDel(gathering); + return; + } + // Too strong (e.g. overpen) - gathers ore but destroys it + if (TryComp(args.OtherEntity, out var oreVein) + && _whitelistSystem.IsWhitelistPass(oreVein.GatherDestructionWhitelist, gathering.Owner)) + { + oreVein.PreventSpawning = true; + } + // End Frontier: gathering changes + Gather(args.OtherEntity, gathering, gatherable); gathering.Comp.Amount--; diff --git a/Content.Server/Mining/MiningSystem.cs b/Content.Server/Mining/MiningSystem.cs index 18e96e57696..8f6bb6ca191 100644 --- a/Content.Server/Mining/MiningSystem.cs +++ b/Content.Server/Mining/MiningSystem.cs @@ -29,6 +29,11 @@ private void OnDestruction(EntityUid uid, OreVeinComponent component, Destructio if (component.CurrentOre == null) return; + // Frontier + if (component.PreventSpawning) + return; + // End Frontier + var proto = _proto.Index(component.CurrentOre); if (proto.OreEntity == null) diff --git a/Content.Server/_NF/Gatherable/Components/MiningGatheringHardComponent.cs b/Content.Server/_NF/Gatherable/Components/MiningGatheringHardComponent.cs new file mode 100644 index 00000000000..56dc31e5d87 --- /dev/null +++ b/Content.Server/_NF/Gatherable/Components/MiningGatheringHardComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server._NF.Gatherable.Components; + +/// +/// Component denotes an item can be used to gather from hard rocks. +/// +[RegisterComponent] +public sealed partial class MiningGatheringHardComponent : Component; diff --git a/Content.Server/_NF/Gatherable/Components/MiningGatheringSoftComponent.cs b/Content.Server/_NF/Gatherable/Components/MiningGatheringSoftComponent.cs new file mode 100644 index 00000000000..ff66dedb73c --- /dev/null +++ b/Content.Server/_NF/Gatherable/Components/MiningGatheringSoftComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server._NF.Gatherable.Components; + +/// +/// Component denotes an item can be used to gather from softer rocks. +/// +[RegisterComponent] +public sealed partial class MiningGatheringSoftComponent : Component; diff --git a/Content.Shared/Mining/Components/OreVeinComponent.cs b/Content.Shared/Mining/Components/OreVeinComponent.cs index 6ee40a624ec..a26ceaf8915 100644 --- a/Content.Shared/Mining/Components/OreVeinComponent.cs +++ b/Content.Shared/Mining/Components/OreVeinComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Random; using Robust.Shared.Prototypes; +using Content.Shared.Whitelist; // Frontier namespace Content.Shared.Mining.Components; @@ -28,4 +29,16 @@ public sealed partial class OreVeinComponent : Component /// [DataField] public ProtoId? CurrentOre; + + /// + /// Frontier: if this ore is somehow "ruined", set this to true before destroying the entity. + /// + [DataField] + public bool PreventSpawning; + + /// + /// Frontier: whitelist to check when gathering materials - these entities are too strong and ruin the ore. + /// + [DataField] + public EntityWhitelist? GatherDestructionWhitelist; } diff --git a/Content.Shared/Weapons/Reflect/ReflectComponent.cs b/Content.Shared/Weapons/Reflect/ReflectComponent.cs index ee35f4dbb1f..8418c1f3efb 100644 --- a/Content.Shared/Weapons/Reflect/ReflectComponent.cs +++ b/Content.Shared/Weapons/Reflect/ReflectComponent.cs @@ -14,7 +14,7 @@ public sealed partial class ReflectComponent : Component /// What we reflect. /// [ViewVariables(VVAccess.ReadWrite), DataField("reflects")] - public ReflectType Reflects = ReflectType.Energy | ReflectType.NonEnergy | ReflectType.ShuttleKinetic; // Frontier: added ShuttleKinetic + public ReflectType Reflects = ReflectType.Energy | ReflectType.NonEnergy; /// /// Probability for a projectile to be reflected. @@ -35,5 +35,4 @@ public enum ReflectType : byte None = 0, NonEnergy = 1 << 0, Energy = 1 << 1, - ShuttleKinetic = 1 << 7, //Frontier: PTK-800 } diff --git a/Resources/Maps/_NF/Bluespace/cave.yml b/Resources/Maps/_NF/Bluespace/cave.yml index 04ff8108855..cb81f9a200b 100644 --- a/Resources/Maps/_NF/Bluespace/cave.yml +++ b/Resources/Maps/_NF/Bluespace/cave.yml @@ -1422,6 +1422,163 @@ entities: - type: Transform pos: 3.8538454,4.824911 parent: 1 +- proto: NFRockMineralHardRich + entities: + - uid: 21 + components: + - type: Transform + pos: 9.5,4.5 + parent: 1 + - uid: 22 + components: + - type: Transform + pos: 10.5,6.5 + parent: 1 + - uid: 81 + components: + - type: Transform + pos: 10.5,4.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: 10.5,5.5 + parent: 1 + - uid: 86 + components: + - type: Transform + pos: 9.5,5.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: 9.5,6.5 + parent: 1 + - uid: 89 + components: + - type: Transform + pos: -9.5,-2.5 + parent: 1 + - uid: 90 + components: + - type: Transform + pos: -10.5,-1.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: 8.5,5.5 + parent: 1 + - uid: 92 + components: + - type: Transform + pos: -11.5,-2.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: -9.5,-3.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: -10.5,-3.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: -10.5,-2.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: 5.5,-2.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 1 + - uid: 174 + components: + - type: Transform + pos: -6.5,8.5 + parent: 1 + - uid: 175 + components: + - type: Transform + pos: 11.5,6.5 + parent: 1 + - uid: 176 + components: + - type: Transform + pos: 11.5,4.5 + parent: 1 + - uid: 177 + components: + - type: Transform + pos: 12.5,4.5 + parent: 1 + - uid: 178 + components: + - type: Transform + pos: 11.5,5.5 + parent: 1 + - uid: 184 + components: + - type: Transform + pos: 10.5,7.5 + parent: 1 + - uid: 185 + components: + - type: Transform + pos: 11.5,7.5 + parent: 1 + - uid: 212 + components: + - type: Transform + pos: 5.5,-3.5 + parent: 1 + - uid: 213 + components: + - type: Transform + pos: 4.5,-3.5 + parent: 1 + - uid: 215 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 1 + - uid: 225 + components: + - type: Transform + pos: -6.5,9.5 + parent: 1 + - uid: 226 + components: + - type: Transform + pos: -7.5,9.5 + parent: 1 + - uid: 258 + components: + - type: Transform + pos: -13.5,3.5 + parent: 1 + - uid: 259 + components: + - type: Transform + pos: -13.5,2.5 + parent: 1 + - uid: 261 + components: + - type: Transform + pos: -7.5,8.5 + parent: 1 - proto: Pickaxe entities: - uid: 407 @@ -2964,163 +3121,6 @@ entities: - type: Transform pos: -7.5,-12.5 parent: 1 -- proto: WallRockDiamond - entities: - - uid: 21 - components: - - type: Transform - pos: 9.5,4.5 - parent: 1 - - uid: 22 - components: - - type: Transform - pos: 10.5,6.5 - parent: 1 - - uid: 81 - components: - - type: Transform - pos: 10.5,4.5 - parent: 1 - - uid: 85 - components: - - type: Transform - pos: 10.5,5.5 - parent: 1 - - uid: 86 - components: - - type: Transform - pos: 9.5,5.5 - parent: 1 - - uid: 87 - components: - - type: Transform - pos: 9.5,6.5 - parent: 1 - - uid: 89 - components: - - type: Transform - pos: -9.5,-2.5 - parent: 1 - - uid: 90 - components: - - type: Transform - pos: -10.5,-1.5 - parent: 1 - - uid: 91 - components: - - type: Transform - pos: 8.5,5.5 - parent: 1 - - uid: 92 - components: - - type: Transform - pos: -11.5,-2.5 - parent: 1 - - uid: 95 - components: - - type: Transform - pos: -9.5,-3.5 - parent: 1 - - uid: 96 - components: - - type: Transform - pos: -10.5,-3.5 - parent: 1 - - uid: 97 - components: - - type: Transform - pos: -10.5,-2.5 - parent: 1 - - uid: 98 - components: - - type: Transform - pos: 5.5,-2.5 - parent: 1 - - uid: 105 - components: - - type: Transform - pos: 4.5,-2.5 - parent: 1 - - uid: 106 - components: - - type: Transform - pos: 4.5,-1.5 - parent: 1 - - uid: 174 - components: - - type: Transform - pos: -6.5,8.5 - parent: 1 - - uid: 175 - components: - - type: Transform - pos: 11.5,6.5 - parent: 1 - - uid: 176 - components: - - type: Transform - pos: 11.5,4.5 - parent: 1 - - uid: 177 - components: - - type: Transform - pos: 12.5,4.5 - parent: 1 - - uid: 178 - components: - - type: Transform - pos: 11.5,5.5 - parent: 1 - - uid: 184 - components: - - type: Transform - pos: 10.5,7.5 - parent: 1 - - uid: 185 - components: - - type: Transform - pos: 11.5,7.5 - parent: 1 - - uid: 212 - components: - - type: Transform - pos: 5.5,-3.5 - parent: 1 - - uid: 213 - components: - - type: Transform - pos: 4.5,-3.5 - parent: 1 - - uid: 215 - components: - - type: Transform - pos: 3.5,-2.5 - parent: 1 - - uid: 225 - components: - - type: Transform - pos: -6.5,9.5 - parent: 1 - - uid: 226 - components: - - type: Transform - pos: -7.5,9.5 - parent: 1 - - uid: 258 - components: - - type: Transform - pos: -13.5,3.5 - parent: 1 - - uid: 259 - components: - - type: Transform - pos: -13.5,2.5 - parent: 1 - - uid: 261 - components: - - type: Transform - pos: -7.5,8.5 - parent: 1 - proto: WarpPoint entities: - uid: 136 diff --git a/Resources/Maps/_NF/Dungeon/supercompacted.yml b/Resources/Maps/_NF/Dungeon/supercompacted.yml new file mode 100644 index 00000000000..649952f6da6 --- /dev/null +++ b/Resources/Maps/_NF/Dungeon/supercompacted.yml @@ -0,0 +1,3348 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 2: FloorAsteroidSand + 6: FloorAsteroidSandUnvariantized + 5: FloorAsteroidTile + 10: FloorAstroGrass + 15: FloorBasalt + 8: FloorBrokenWood + 14: FloorCaveDrought + 12: FloorChromite + 13: FloorIce + 16: FloorLowDesert + 11: FloorRGlass + 82: FloorShuttleOrange + 1: FloorShuttlePurple + 89: FloorSteel + 9: FloorSteelDamaged + 7: FloorWood + 3: Plating + 4: PlatingAsteroid +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + - type: Transform + - type: Map + mapPaused: True + - type: PhysicsMap + - type: GridTree + - type: MovedGrids + - type: Broadphase + - type: OccluderTree + - type: MapGrid + chunks: + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA + version: 6 + 0,0: + ind: 0,0 + tiles: UgAAAAAAUgAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAADUgAAAAAAUgAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAADUgAAAAAAUgAAAAAADAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAADUgAAAAAADAAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAACUgAAAAAADAAAAAAADAAAAAAAUgAAAAAAUgAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAAAQAAAAADDAAAAAAADAAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADAAAAAAADAAAAAAADAAAAAAAUgAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAAAQAAAAADUgAAAAAAUgAAAAAADAAAAAAADAAAAAAADAAAAAAAAQAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAAUgAAAAAADAAAAAAADAAAAAAAUgAAAAAAUgAAAAAAAQAAAAADUgAAAAAAUgAAAAAAUgAAAAAADAAAAAAADAAAAAAAAQAAAAADUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAADAQAAAAACAQAAAAADAQAAAAACAQAAAAACAQAAAAACAQAAAAADAQAAAAADAQAAAAACAQAAAAABAQAAAAAAAQAAAAABAQAAAAABAQAAAAABAQAAAAADAQAAAAABUgAAAAAAUgAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAABUgAAAAAAUgAAAAAADQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAADUgAAAAAADQAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAACUgAAAAAADQAAAAAADQAAAAAAUgAAAAAAUgAAAAAADQAAAAAADQAAAAAADQAAAAAADQAAAAAAAQAAAAAADQAAAAAADQAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAACUgAAAAAADQAAAAAADQAAAAAADQAAAAAAUgAAAAAADQAAAAAADQAAAAAADQAAAAAADQAAAAAAAQAAAAADUgAAAAAAUgAAAAAADQAAAAAADQAAAAAADQAAAAAAAQAAAAABDQAAAAAADQAAAAAADQAAAAAADQAAAAAAUgAAAAAADQAAAAAADQAAAAAAUgAAAAAAUgAAAAAAAQAAAAABUgAAAAAAUgAAAAAAUgAAAAAADQAAAAAADQAAAAAAAQAAAAABUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAADAQAAAAACAQAAAAAAAQAAAAABAQAAAAADAQAAAAACAQAAAAADAQAAAAABAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAADAQAAAAABAQAAAAAAAQAAAAABUgAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAACUgAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAABUgAAAAAAUgAAAAAABgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAADUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAACUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAACUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAADUgAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAA + version: 6 + 0,1: + ind: 0,1 + tiles: UgAAAAAABgAAAAAABgAAAAAAUgAAAAAAUgAAAAAAAQAAAAABUgAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAAAQAAAAACUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAADAQAAAAABAQAAAAACAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAACAQAAAAABAQAAAAAAAQAAAAADAQAAAAADAQAAAAADAQAAAAABAQAAAAAAAQAAAAABUgAAAAAAUgAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAACUgAAAAAAUgAAAAAADgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADgAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAADUgAAAAAADgAAAAAADgAAAAAAUgAAAAAAUgAAAAAADgAAAAAADgAAAAAADgAAAAAADgAAAAAAAQAAAAACDgAAAAAADgAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADgAAAAAADgAAAAAADgAAAAAAUgAAAAAADgAAAAAADgAAAAAADgAAAAAADgAAAAAAAQAAAAADUgAAAAAAUgAAAAAADgAAAAAADgAAAAAADgAAAAAAAQAAAAADDgAAAAAADgAAAAAADgAAAAAADgAAAAAAUgAAAAAADgAAAAAADgAAAAAAUgAAAAAAUgAAAAAAAQAAAAACUgAAAAAAUgAAAAAAUgAAAAAADgAAAAAADgAAAAAAAQAAAAABUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAADAQAAAAAAAQAAAAABAQAAAAAAAQAAAAACAQAAAAAAAQAAAAAAAQAAAAACAQAAAAADAQAAAAACAQAAAAAAAQAAAAABAQAAAAAAAQAAAAABAQAAAAACAQAAAAADUgAAAAAAUgAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAACUgAAAAAAUgAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAADUgAAAAAAUgAAAAAADwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAABUgAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADwAAAAAADwAAAAAAUgAAAAAAUgAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAAQAAAAADDwAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAABUgAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADwAAAAAADwAAAAAADwAAAAAAAQAAAAADDwAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAADwAAAAAADwAAAAAAUgAAAAAAUgAAAAAAAQAAAAADUgAAAAAAUgAAAAAAUgAAAAAADwAAAAAADwAAAAAAAQAAAAABUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAADAQAAAAACAQAAAAABAQAAAAAAAQAAAAACAQAAAAADAQAAAAAAAQAAAAABAQAAAAABAQAAAAAAAQAAAAAAAQAAAAACAQAAAAADAQAAAAACAQAAAAAAAQAAAAACUgAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAEAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAUgAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADAQAAAAABAQAAAAAAAQAAAAACAQAAAAAAAQAAAAADAQAAAAABAQAAAAACAQAAAAACAQAAAAACAQAAAAABAQAAAAABAQAAAAADAQAAAAACAQAAAAACAQAAAAAD + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA + version: 6 + -1,1: + ind: -1,1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAD + version: 6 + 1,-1: + ind: 1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADAQAAAAACAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAABAQAAAAABAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAA + version: 6 + 1,0: + ind: 1,0 + tiles: UgAAAAAAAQAAAAABUgAAAAAAUgAAAAAADAAAAAAAUgAAAAAAUgAAAAAAAQAAAAACUgAAAAAAUgAAAAAAUgAAAAAADAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAABUgAAAAAADAAAAAAADAAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADAAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADAAAAAAAAQAAAAACUgAAAAAADAAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAABDAAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAAAQAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADAAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAADUgAAAAAADAAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAAAQAAAAAAUgAAAAAADAAAAAAAAQAAAAACAQAAAAADAQAAAAAAAQAAAAAAAQAAAAABAQAAAAADAQAAAAADAQAAAAACAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAUgAAAAAAAQAAAAADUgAAAAAAUgAAAAAADQAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADQAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAACUgAAAAAADQAAAAAADQAAAAAAUgAAAAAAUgAAAAAAAQAAAAADUgAAAAAADQAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADQAAAAAAAQAAAAADUgAAAAAADQAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAACDQAAAAAADQAAAAAADQAAAAAADQAAAAAADQAAAAAAAQAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAACUgAAAAAADQAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAADUgAAAAAADQAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADQAAAAAAUgAAAAAAAQAAAAACUgAAAAAAUgAAAAAAUgAAAAAADQAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADQAAAAAADQAAAAAADQAAAAAADQAAAAAAAQAAAAAAUgAAAAAADQAAAAAAAQAAAAAAAQAAAAADAQAAAAACAQAAAAABAQAAAAAAAQAAAAABAQAAAAADAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAUgAAAAAAAQAAAAABUgAAAAAAUgAAAAAABgAAAAAAUgAAAAAAUgAAAAAAAQAAAAADUgAAAAAAUgAAAAAAUgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAADUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAABgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAABUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAACUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAA + version: 6 + 1,1: + ind: 1,1 + tiles: UgAAAAAAAQAAAAABUgAAAAAAUgAAAAAAUgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAAUgAAAAAABgAAAAAAAQAAAAABAQAAAAAAAQAAAAADAQAAAAACAQAAAAACAQAAAAABAQAAAAABAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAUgAAAAAAAQAAAAACUgAAAAAAUgAAAAAADgAAAAAAUgAAAAAAUgAAAAAAAQAAAAADUgAAAAAAUgAAAAAAUgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAABUgAAAAAADgAAAAAADgAAAAAAUgAAAAAAUgAAAAAAAQAAAAADUgAAAAAADgAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADgAAAAAAAQAAAAACUgAAAAAADgAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAADDgAAAAAADgAAAAAADgAAAAAADgAAAAAADgAAAAAAAQAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAACUgAAAAAADgAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAACUgAAAAAADgAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADgAAAAAAUgAAAAAAAQAAAAABUgAAAAAAUgAAAAAAUgAAAAAADgAAAAAAUgAAAAAAAQAAAAADUgAAAAAADgAAAAAADgAAAAAADgAAAAAADgAAAAAAAQAAAAAAUgAAAAAADgAAAAAAAQAAAAAAAQAAAAADAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAACAQAAAAADAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAUgAAAAAAAQAAAAABUgAAAAAAUgAAAAAADwAAAAAAUgAAAAAAUgAAAAAAAQAAAAADUgAAAAAAUgAAAAAAUgAAAAAADwAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAABUgAAAAAADwAAAAAADwAAAAAAUgAAAAAAUgAAAAAAAQAAAAACUgAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADwAAAAAAAQAAAAAAUgAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAABDwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAAQAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAABUgAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAACUgAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADwAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADwAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAAQAAAAAAUgAAAAAADwAAAAAAAQAAAAAAAQAAAAADAQAAAAAAAQAAAAABAQAAAAACAQAAAAAAAQAAAAADAQAAAAADAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAEAAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAA + version: 6 + -1,2: + ind: -1,2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,2: + ind: 0,2 + tiles: UgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAAQAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAAQAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAAQAAAAACAQAAAAADAQAAAAADAQAAAAADAQAAAAABAQAAAAACAQAAAAACAQAAAAACAQAAAAADAQAAAAAAAQAAAAADAQAAAAABAQAAAAACAQAAAAACAQAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAABgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAADAQAAAAACAQAAAAABAQAAAAADAQAAAAABAQAAAAADAQAAAAABAQAAAAACAQAAAAAAAQAAAAABAQAAAAADAQAAAAAAAQAAAAABAQAAAAAAAQAAAAACAQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 1,2: + ind: 1,2 + tiles: EAAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAAQAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAAQAAAAABAQAAAAABAQAAAAABAQAAAAACAQAAAAAAAQAAAAAAAQAAAAACAQAAAAADAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAABgAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAABgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAAUgAAAAAABgAAAAAAAQAAAAAAAQAAAAADAQAAAAAAAQAAAAADAQAAAAADAQAAAAAAAQAAAAABAQAAAAADAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,-1: + ind: 2,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,0: + ind: 2,0 + tiles: UgAAAAAADAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADAAAAAAADAAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAADAAAAAAADAAAAAAAAQAAAAAAUgAAAAAADAAAAAAADAAAAAAADAAAAAAADAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAADAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADAAAAAAADAAAAAAADAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAADAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADAAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAADQAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADQAAAAAADQAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAAADQAAAAAADQAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAADQAAAAAADQAAAAAAAQAAAAAAUgAAAAAADQAAAAAADQAAAAAADQAAAAAADQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAADQAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADQAAAAAADQAAAAAADQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAADQAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADQAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,1: + ind: 2,1 + tiles: UgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADgAAAAAADgAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAAADgAAAAAADgAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAADgAAAAAAAQAAAAAAUgAAAAAADgAAAAAADgAAAAAADgAAAAAADgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADgAAAAAADgAAAAAADgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAADwAAAAAAUgAAAAAAAQAAAAAAUgAAAAAADwAAAAAADwAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAADwAAAAAADwAAAAAAAQAAAAAAUgAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAADwAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAADwAAAAAADwAAAAAADwAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAADwAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAADwAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 2,2: + ind: 2,2 + tiles: EAAAAAAAEAAAAAAAEAAAAAAAAQAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAEAAAAAAAEAAAAAAAEAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAEAAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAAUgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAABgAAAAAABgAAAAAABgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAUgAAAAAAUgAAAAAAUgAAAAAABgAAAAAAUgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: [] + - type: LoadedMap + - type: SpreaderGrid + - type: GridPathfinding +- proto: NFAndesiteMineralHardRich + entities: + - uid: 370 + components: + - type: Transform + pos: 37.5,18.5 + parent: 1 + - uid: 371 + components: + - type: Transform + pos: 37.5,19.5 + parent: 1 + - uid: 372 + components: + - type: Transform + pos: 36.5,19.5 + parent: 1 + - uid: 373 + components: + - type: Transform + pos: 37.5,20.5 + parent: 1 + - uid: 374 + components: + - type: Transform + pos: 38.5,20.5 + parent: 1 + - uid: 375 + components: + - type: Transform + pos: 38.5,19.5 + parent: 1 + - uid: 376 + components: + - type: Transform + pos: 38.5,18.5 + parent: 1 + - uid: 377 + components: + - type: Transform + pos: 39.5,19.5 + parent: 1 + - uid: 378 + components: + - type: Transform + pos: 39.5,20.5 + parent: 1 + - uid: 379 + components: + - type: Transform + pos: 40.5,20.5 + parent: 1 + - uid: 380 + components: + - type: Transform + pos: 40.5,21.5 + parent: 1 + - uid: 381 + components: + - type: Transform + pos: 39.5,21.5 + parent: 1 + - uid: 382 + components: + - type: Transform + pos: 39.5,22.5 + parent: 1 + - uid: 383 + components: + - type: Transform + pos: 38.5,21.5 + parent: 1 + - uid: 384 + components: + - type: Transform + pos: 33.5,18.5 + parent: 1 + - uid: 385 + components: + - type: Transform + pos: 33.5,19.5 + parent: 1 + - uid: 386 + components: + - type: Transform + pos: 32.5,19.5 + parent: 1 + - uid: 387 + components: + - type: Transform + pos: 32.5,20.5 + parent: 1 + - uid: 388 + components: + - type: Transform + pos: 33.5,20.5 + parent: 1 + - uid: 389 + components: + - type: Transform + pos: 34.5,20.5 + parent: 1 + - uid: 390 + components: + - type: Transform + pos: 33.5,21.5 + parent: 1 + - uid: 391 + components: + - type: Transform + pos: 33.5,22.5 + parent: 1 + - uid: 392 + components: + - type: Transform + pos: 32.5,21.5 + parent: 1 + - uid: 393 + components: + - type: Transform + pos: 31.5,21.5 + parent: 1 + - uid: 394 + components: + - type: Transform + pos: 31.5,22.5 + parent: 1 + - uid: 395 + components: + - type: Transform + pos: 31.5,20.5 + parent: 1 + - uid: 396 + components: + - type: Transform + pos: 30.5,20.5 + parent: 1 + - uid: 397 + components: + - type: Transform + pos: 28.5,20.5 + parent: 1 + - uid: 398 + components: + - type: Transform + pos: 27.5,20.5 + parent: 1 + - uid: 399 + components: + - type: Transform + pos: 27.5,19.5 + parent: 1 + - uid: 400 + components: + - type: Transform + pos: 27.5,18.5 + parent: 1 + - uid: 401 + components: + - type: Transform + pos: 26.5,19.5 + parent: 1 + - uid: 402 + components: + - type: Transform + pos: 25.5,19.5 + parent: 1 + - uid: 403 + components: + - type: Transform + pos: 25.5,20.5 + parent: 1 + - uid: 404 + components: + - type: Transform + pos: 24.5,20.5 + parent: 1 + - uid: 405 + components: + - type: Transform + pos: 26.5,20.5 + parent: 1 + - uid: 406 + components: + - type: Transform + pos: 25.5,21.5 + parent: 1 + - uid: 407 + components: + - type: Transform + pos: 26.5,21.5 + parent: 1 + - uid: 408 + components: + - type: Transform + pos: 27.5,21.5 + parent: 1 + - uid: 409 + components: + - type: Transform + pos: 25.5,22.5 + parent: 1 + - uid: 410 + components: + - type: Transform + pos: 26.5,22.5 + parent: 1 + - uid: 411 + components: + - type: Transform + pos: 27.5,22.5 + parent: 1 + - uid: 412 + components: + - type: Transform + pos: 28.5,22.5 + parent: 1 + - uid: 413 + components: + - type: Transform + pos: 20.5,18.5 + parent: 1 + - uid: 414 + components: + - type: Transform + pos: 20.5,19.5 + parent: 1 + - uid: 415 + components: + - type: Transform + pos: 19.5,19.5 + parent: 1 + - uid: 416 + components: + - type: Transform + pos: 19.5,20.5 + parent: 1 + - uid: 417 + components: + - type: Transform + pos: 20.5,20.5 + parent: 1 + - uid: 418 + components: + - type: Transform + pos: 21.5,20.5 + parent: 1 + - uid: 419 + components: + - type: Transform + pos: 21.5,21.5 + parent: 1 + - uid: 420 + components: + - type: Transform + pos: 20.5,21.5 + parent: 1 + - uid: 421 + components: + - type: Transform + pos: 19.5,21.5 + parent: 1 + - uid: 422 + components: + - type: Transform + pos: 21.5,22.5 + parent: 1 + - uid: 423 + components: + - type: Transform + pos: 14.5,18.5 + parent: 1 + - uid: 424 + components: + - type: Transform + pos: 14.5,19.5 + parent: 1 + - uid: 425 + components: + - type: Transform + pos: 13.5,19.5 + parent: 1 + - uid: 426 + components: + - type: Transform + pos: 13.5,20.5 + parent: 1 + - uid: 427 + components: + - type: Transform + pos: 12.5,21.5 + parent: 1 + - uid: 428 + components: + - type: Transform + pos: 13.5,21.5 + parent: 1 + - uid: 429 + components: + - type: Transform + pos: 14.5,21.5 + parent: 1 + - uid: 430 + components: + - type: Transform + pos: 14.5,20.5 + parent: 1 + - uid: 431 + components: + - type: Transform + pos: 15.5,21.5 + parent: 1 + - uid: 432 + components: + - type: Transform + pos: 15.5,20.5 + parent: 1 + - uid: 433 + components: + - type: Transform + pos: 16.5,20.5 + parent: 1 + - uid: 434 + components: + - type: Transform + pos: 9.5,18.5 + parent: 1 + - uid: 435 + components: + - type: Transform + pos: 8.5,18.5 + parent: 1 + - uid: 436 + components: + - type: Transform + pos: 8.5,19.5 + parent: 1 + - uid: 437 + components: + - type: Transform + pos: 9.5,19.5 + parent: 1 + - uid: 438 + components: + - type: Transform + pos: 9.5,20.5 + parent: 1 + - uid: 439 + components: + - type: Transform + pos: 8.5,20.5 + parent: 1 + - uid: 440 + components: + - type: Transform + pos: 7.5,20.5 + parent: 1 + - uid: 441 + components: + - type: Transform + pos: 7.5,19.5 + parent: 1 + - uid: 442 + components: + - type: Transform + pos: 6.5,20.5 + parent: 1 + - uid: 443 + components: + - type: Transform + pos: 8.5,21.5 + parent: 1 + - uid: 444 + components: + - type: Transform + pos: 9.5,21.5 + parent: 1 + - uid: 445 + components: + - type: Transform + pos: 9.5,22.5 + parent: 1 + - uid: 446 + components: + - type: Transform + pos: 10.5,22.5 + parent: 1 + - uid: 447 + components: + - type: Transform + pos: 10.5,21.5 + parent: 1 + - uid: 448 + components: + - type: Transform + pos: 3.5,18.5 + parent: 1 + - uid: 449 + components: + - type: Transform + pos: 2.5,18.5 + parent: 1 + - uid: 450 + components: + - type: Transform + pos: 2.5,19.5 + parent: 1 + - uid: 451 + components: + - type: Transform + pos: 3.5,19.5 + parent: 1 + - uid: 452 + components: + - type: Transform + pos: 3.5,20.5 + parent: 1 + - uid: 453 + components: + - type: Transform + pos: 4.5,20.5 + parent: 1 + - uid: 454 + components: + - type: Transform + pos: 4.5,21.5 + parent: 1 + - uid: 455 + components: + - type: Transform + pos: 3.5,21.5 + parent: 1 + - uid: 456 + components: + - type: Transform + pos: 2.5,21.5 + parent: 1 + - uid: 457 + components: + - type: Transform + pos: 2.5,22.5 + parent: 1 + - uid: 458 + components: + - type: Transform + pos: 1.5,22.5 + parent: 1 + - uid: 459 + components: + - type: Transform + pos: 1.5,21.5 + parent: 1 + - uid: 460 + components: + - type: Transform + pos: 1.5,20.5 + parent: 1 + - uid: 461 + components: + - type: Transform + pos: 2.5,20.5 + parent: 1 +- proto: NFAsteroidMineralHardRich + entities: + - uid: 186 + components: + - type: Transform + pos: 38.5,14.5 + parent: 1 + - uid: 187 + components: + - type: Transform + pos: 38.5,13.5 + parent: 1 + - uid: 188 + components: + - type: Transform + pos: 38.5,12.5 + parent: 1 + - uid: 189 + components: + - type: Transform + pos: 38.5,15.5 + parent: 1 + - uid: 190 + components: + - type: Transform + pos: 39.5,13.5 + parent: 1 + - uid: 191 + components: + - type: Transform + pos: 39.5,15.5 + parent: 1 + - uid: 192 + components: + - type: Transform + pos: 39.5,16.5 + parent: 1 + - uid: 193 + components: + - type: Transform + pos: 40.5,14.5 + parent: 1 + - uid: 194 + components: + - type: Transform + pos: 40.5,15.5 + parent: 1 + - uid: 195 + components: + - type: Transform + pos: 39.5,14.5 + parent: 1 + - uid: 196 + components: + - type: Transform + pos: 37.5,13.5 + parent: 1 + - uid: 197 + components: + - type: Transform + pos: 37.5,14.5 + parent: 1 + - uid: 198 + components: + - type: Transform + pos: 37.5,12.5 + parent: 1 + - uid: 199 + components: + - type: Transform + pos: 36.5,13.5 + parent: 1 + - uid: 200 + components: + - type: Transform + pos: 31.5,16.5 + parent: 1 + - uid: 201 + components: + - type: Transform + pos: 31.5,15.5 + parent: 1 + - uid: 202 + components: + - type: Transform + pos: 32.5,15.5 + parent: 1 + - uid: 203 + components: + - type: Transform + pos: 33.5,16.5 + parent: 1 + - uid: 204 + components: + - type: Transform + pos: 33.5,15.5 + parent: 1 + - uid: 205 + components: + - type: Transform + pos: 32.5,14.5 + parent: 1 + - uid: 206 + components: + - type: Transform + pos: 32.5,13.5 + parent: 1 + - uid: 207 + components: + - type: Transform + pos: 33.5,13.5 + parent: 1 + - uid: 208 + components: + - type: Transform + pos: 34.5,14.5 + parent: 1 + - uid: 209 + components: + - type: Transform + pos: 33.5,14.5 + parent: 1 + - uid: 210 + components: + - type: Transform + pos: 33.5,12.5 + parent: 1 + - uid: 211 + components: + - type: Transform + pos: 27.5,12.5 + parent: 1 + - uid: 212 + components: + - type: Transform + pos: 30.5,14.5 + parent: 1 + - uid: 213 + components: + - type: Transform + pos: 31.5,14.5 + parent: 1 + - uid: 214 + components: + - type: Transform + pos: 27.5,13.5 + parent: 1 + - uid: 215 + components: + - type: Transform + pos: 28.5,14.5 + parent: 1 + - uid: 216 + components: + - type: Transform + pos: 27.5,14.5 + parent: 1 + - uid: 217 + components: + - type: Transform + pos: 27.5,15.5 + parent: 1 + - uid: 218 + components: + - type: Transform + pos: 28.5,16.5 + parent: 1 + - uid: 219 + components: + - type: Transform + pos: 26.5,16.5 + parent: 1 + - uid: 220 + components: + - type: Transform + pos: 27.5,16.5 + parent: 1 + - uid: 221 + components: + - type: Transform + pos: 25.5,16.5 + parent: 1 + - uid: 222 + components: + - type: Transform + pos: 26.5,15.5 + parent: 1 + - uid: 223 + components: + - type: Transform + pos: 25.5,15.5 + parent: 1 + - uid: 224 + components: + - type: Transform + pos: 26.5,14.5 + parent: 1 + - uid: 225 + components: + - type: Transform + pos: 25.5,13.5 + parent: 1 + - uid: 226 + components: + - type: Transform + pos: 21.5,16.5 + parent: 1 + - uid: 227 + components: + - type: Transform + pos: 24.5,14.5 + parent: 1 + - uid: 228 + components: + - type: Transform + pos: 26.5,13.5 + parent: 1 + - uid: 229 + components: + - type: Transform + pos: 25.5,14.5 + parent: 1 + - uid: 230 + components: + - type: Transform + pos: 20.5,14.5 + parent: 1 + - uid: 231 + components: + - type: Transform + pos: 19.5,15.5 + parent: 1 + - uid: 232 + components: + - type: Transform + pos: 20.5,15.5 + parent: 1 + - uid: 233 + components: + - type: Transform + pos: 21.5,14.5 + parent: 1 + - uid: 234 + components: + - type: Transform + pos: 21.5,15.5 + parent: 1 + - uid: 235 + components: + - type: Transform + pos: 19.5,14.5 + parent: 1 + - uid: 236 + components: + - type: Transform + pos: 20.5,12.5 + parent: 1 + - uid: 237 + components: + - type: Transform + pos: 12.5,15.5 + parent: 1 + - uid: 238 + components: + - type: Transform + pos: 13.5,15.5 + parent: 1 + - uid: 239 + components: + - type: Transform + pos: 10.5,15.5 + parent: 1 + - uid: 240 + components: + - type: Transform + pos: 13.5,14.5 + parent: 1 + - uid: 241 + components: + - type: Transform + pos: 14.5,13.5 + parent: 1 + - uid: 242 + components: + - type: Transform + pos: 13.5,13.5 + parent: 1 + - uid: 243 + components: + - type: Transform + pos: 14.5,12.5 + parent: 1 + - uid: 244 + components: + - type: Transform + pos: 14.5,15.5 + parent: 1 + - uid: 245 + components: + - type: Transform + pos: 14.5,14.5 + parent: 1 + - uid: 246 + components: + - type: Transform + pos: 16.5,14.5 + parent: 1 + - uid: 247 + components: + - type: Transform + pos: 15.5,14.5 + parent: 1 + - uid: 248 + components: + - type: Transform + pos: 19.5,13.5 + parent: 1 + - uid: 249 + components: + - type: Transform + pos: 15.5,15.5 + parent: 1 + - uid: 250 + components: + - type: Transform + pos: 20.5,13.5 + parent: 1 + - uid: 251 + components: + - type: Transform + pos: 10.5,16.5 + parent: 1 + - uid: 252 + components: + - type: Transform + pos: 9.5,16.5 + parent: 1 + - uid: 253 + components: + - type: Transform + pos: 9.5,15.5 + parent: 1 + - uid: 254 + components: + - type: Transform + pos: 8.5,15.5 + parent: 1 + - uid: 255 + components: + - type: Transform + pos: 9.5,14.5 + parent: 1 + - uid: 256 + components: + - type: Transform + pos: 8.5,14.5 + parent: 1 + - uid: 257 + components: + - type: Transform + pos: 9.5,13.5 + parent: 1 + - uid: 258 + components: + - type: Transform + pos: 9.5,12.5 + parent: 1 + - uid: 259 + components: + - type: Transform + pos: 8.5,12.5 + parent: 1 + - uid: 260 + components: + - type: Transform + pos: 8.5,13.5 + parent: 1 + - uid: 261 + components: + - type: Transform + pos: 7.5,14.5 + parent: 1 + - uid: 262 + components: + - type: Transform + pos: 7.5,13.5 + parent: 1 + - uid: 263 + components: + - type: Transform + pos: 6.5,14.5 + parent: 1 + - uid: 264 + components: + - type: Transform + pos: 1.5,16.5 + parent: 1 + - uid: 265 + components: + - type: Transform + pos: 2.5,16.5 + parent: 1 + - uid: 266 + components: + - type: Transform + pos: 4.5,15.5 + parent: 1 + - uid: 267 + components: + - type: Transform + pos: 3.5,15.5 + parent: 1 + - uid: 268 + components: + - type: Transform + pos: 3.5,14.5 + parent: 1 + - uid: 269 + components: + - type: Transform + pos: 2.5,13.5 + parent: 1 + - uid: 270 + components: + - type: Transform + pos: 1.5,14.5 + parent: 1 + - uid: 271 + components: + - type: Transform + pos: 2.5,14.5 + parent: 1 + - uid: 272 + components: + - type: Transform + pos: 4.5,14.5 + parent: 1 + - uid: 273 + components: + - type: Transform + pos: 2.5,15.5 + parent: 1 + - uid: 274 + components: + - type: Transform + pos: 1.5,15.5 + parent: 1 + - uid: 275 + components: + - type: Transform + pos: 2.5,12.5 + parent: 1 + - uid: 276 + components: + - type: Transform + pos: 3.5,12.5 + parent: 1 + - uid: 277 + components: + - type: Transform + pos: 3.5,13.5 + parent: 1 +- proto: NFBasaltMineralHardRich + entities: + - uid: 278 + components: + - type: Transform + pos: 2.5,24.5 + parent: 1 + - uid: 279 + components: + - type: Transform + pos: 2.5,25.5 + parent: 1 + - uid: 280 + components: + - type: Transform + pos: 3.5,25.5 + parent: 1 + - uid: 281 + components: + - type: Transform + pos: 3.5,24.5 + parent: 1 + - uid: 282 + components: + - type: Transform + pos: 3.5,26.5 + parent: 1 + - uid: 283 + components: + - type: Transform + pos: 4.5,26.5 + parent: 1 + - uid: 284 + components: + - type: Transform + pos: 4.5,27.5 + parent: 1 + - uid: 285 + components: + - type: Transform + pos: 3.5,27.5 + parent: 1 + - uid: 286 + components: + - type: Transform + pos: 2.5,26.5 + parent: 1 + - uid: 287 + components: + - type: Transform + pos: 1.5,26.5 + parent: 1 + - uid: 288 + components: + - type: Transform + pos: 1.5,27.5 + parent: 1 + - uid: 289 + components: + - type: Transform + pos: 2.5,27.5 + parent: 1 + - uid: 290 + components: + - type: Transform + pos: 2.5,28.5 + parent: 1 + - uid: 291 + components: + - type: Transform + pos: 1.5,28.5 + parent: 1 + - uid: 292 + components: + - type: Transform + pos: 6.5,26.5 + parent: 1 + - uid: 293 + components: + - type: Transform + pos: 7.5,26.5 + parent: 1 + - uid: 294 + components: + - type: Transform + pos: 7.5,25.5 + parent: 1 + - uid: 295 + components: + - type: Transform + pos: 8.5,24.5 + parent: 1 + - uid: 296 + components: + - type: Transform + pos: 8.5,25.5 + parent: 1 + - uid: 297 + components: + - type: Transform + pos: 9.5,25.5 + parent: 1 + - uid: 298 + components: + - type: Transform + pos: 9.5,24.5 + parent: 1 + - uid: 299 + components: + - type: Transform + pos: 9.5,26.5 + parent: 1 + - uid: 300 + components: + - type: Transform + pos: 8.5,26.5 + parent: 1 + - uid: 301 + components: + - type: Transform + pos: 8.5,27.5 + parent: 1 + - uid: 302 + components: + - type: Transform + pos: 9.5,27.5 + parent: 1 + - uid: 303 + components: + - type: Transform + pos: 9.5,28.5 + parent: 1 + - uid: 304 + components: + - type: Transform + pos: 10.5,28.5 + parent: 1 + - uid: 305 + components: + - type: Transform + pos: 10.5,27.5 + parent: 1 + - uid: 306 + components: + - type: Transform + pos: 12.5,27.5 + parent: 1 + - uid: 307 + components: + - type: Transform + pos: 13.5,27.5 + parent: 1 + - uid: 308 + components: + - type: Transform + pos: 13.5,26.5 + parent: 1 + - uid: 309 + components: + - type: Transform + pos: 14.5,26.5 + parent: 1 + - uid: 310 + components: + - type: Transform + pos: 14.5,27.5 + parent: 1 + - uid: 311 + components: + - type: Transform + pos: 15.5,27.5 + parent: 1 + - uid: 312 + components: + - type: Transform + pos: 15.5,26.5 + parent: 1 + - uid: 313 + components: + - type: Transform + pos: 16.5,26.5 + parent: 1 + - uid: 314 + components: + - type: Transform + pos: 13.5,25.5 + parent: 1 + - uid: 315 + components: + - type: Transform + pos: 14.5,25.5 + parent: 1 + - uid: 316 + components: + - type: Transform + pos: 14.5,24.5 + parent: 1 + - uid: 317 + components: + - type: Transform + pos: 20.5,24.5 + parent: 1 + - uid: 318 + components: + - type: Transform + pos: 20.5,25.5 + parent: 1 + - uid: 319 + components: + - type: Transform + pos: 19.5,25.5 + parent: 1 + - uid: 320 + components: + - type: Transform + pos: 19.5,26.5 + parent: 1 + - uid: 321 + components: + - type: Transform + pos: 19.5,27.5 + parent: 1 + - uid: 322 + components: + - type: Transform + pos: 20.5,27.5 + parent: 1 + - uid: 323 + components: + - type: Transform + pos: 20.5,26.5 + parent: 1 + - uid: 324 + components: + - type: Transform + pos: 21.5,26.5 + parent: 1 + - uid: 325 + components: + - type: Transform + pos: 21.5,27.5 + parent: 1 + - uid: 326 + components: + - type: Transform + pos: 21.5,28.5 + parent: 1 + - uid: 327 + components: + - type: Transform + pos: 24.5,26.5 + parent: 1 + - uid: 328 + components: + - type: Transform + pos: 25.5,26.5 + parent: 1 + - uid: 329 + components: + - type: Transform + pos: 25.5,25.5 + parent: 1 + - uid: 330 + components: + - type: Transform + pos: 26.5,25.5 + parent: 1 + - uid: 331 + components: + - type: Transform + pos: 27.5,25.5 + parent: 1 + - uid: 332 + components: + - type: Transform + pos: 27.5,24.5 + parent: 1 + - uid: 333 + components: + - type: Transform + pos: 28.5,26.5 + parent: 1 + - uid: 334 + components: + - type: Transform + pos: 27.5,26.5 + parent: 1 + - uid: 335 + components: + - type: Transform + pos: 26.5,26.5 + parent: 1 + - uid: 336 + components: + - type: Transform + pos: 26.5,27.5 + parent: 1 + - uid: 337 + components: + - type: Transform + pos: 27.5,27.5 + parent: 1 + - uid: 338 + components: + - type: Transform + pos: 27.5,28.5 + parent: 1 + - uid: 339 + components: + - type: Transform + pos: 28.5,28.5 + parent: 1 + - uid: 340 + components: + - type: Transform + pos: 26.5,28.5 + parent: 1 + - uid: 341 + components: + - type: Transform + pos: 25.5,28.5 + parent: 1 + - uid: 342 + components: + - type: Transform + pos: 25.5,27.5 + parent: 1 + - uid: 343 + components: + - type: Transform + pos: 30.5,26.5 + parent: 1 + - uid: 344 + components: + - type: Transform + pos: 31.5,26.5 + parent: 1 + - uid: 345 + components: + - type: Transform + pos: 31.5,27.5 + parent: 1 + - uid: 346 + components: + - type: Transform + pos: 31.5,28.5 + parent: 1 + - uid: 347 + components: + - type: Transform + pos: 32.5,27.5 + parent: 1 + - uid: 348 + components: + - type: Transform + pos: 32.5,26.5 + parent: 1 + - uid: 349 + components: + - type: Transform + pos: 32.5,25.5 + parent: 1 + - uid: 350 + components: + - type: Transform + pos: 33.5,25.5 + parent: 1 + - uid: 351 + components: + - type: Transform + pos: 33.5,24.5 + parent: 1 + - uid: 352 + components: + - type: Transform + pos: 33.5,26.5 + parent: 1 + - uid: 353 + components: + - type: Transform + pos: 34.5,26.5 + parent: 1 + - uid: 354 + components: + - type: Transform + pos: 33.5,27.5 + parent: 1 + - uid: 355 + components: + - type: Transform + pos: 33.5,28.5 + parent: 1 + - uid: 356 + components: + - type: Transform + pos: 36.5,25.5 + parent: 1 + - uid: 357 + components: + - type: Transform + pos: 37.5,25.5 + parent: 1 + - uid: 358 + components: + - type: Transform + pos: 37.5,24.5 + parent: 1 + - uid: 359 + components: + - type: Transform + pos: 38.5,24.5 + parent: 1 + - uid: 360 + components: + - type: Transform + pos: 38.5,25.5 + parent: 1 + - uid: 361 + components: + - type: Transform + pos: 39.5,25.5 + parent: 1 + - uid: 362 + components: + - type: Transform + pos: 37.5,26.5 + parent: 1 + - uid: 363 + components: + - type: Transform + pos: 38.5,26.5 + parent: 1 + - uid: 364 + components: + - type: Transform + pos: 38.5,27.5 + parent: 1 + - uid: 365 + components: + - type: Transform + pos: 39.5,28.5 + parent: 1 + - uid: 366 + components: + - type: Transform + pos: 39.5,27.5 + parent: 1 + - uid: 367 + components: + - type: Transform + pos: 39.5,26.5 + parent: 1 + - uid: 368 + components: + - type: Transform + pos: 40.5,26.5 + parent: 1 + - uid: 369 + components: + - type: Transform + pos: 40.5,27.5 + parent: 1 +- proto: NFChromiteMineralHardRich + entities: + - uid: 2 + components: + - type: Transform + pos: 2.5,0.5 + parent: 1 + - uid: 3 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 4 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 + - uid: 5 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 + - uid: 6 + components: + - type: Transform + pos: 3.5,2.5 + parent: 1 + - uid: 7 + components: + - type: Transform + pos: 4.5,2.5 + parent: 1 + - uid: 8 + components: + - type: Transform + pos: 4.5,3.5 + parent: 1 + - uid: 9 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 10 + components: + - type: Transform + pos: 2.5,3.5 + parent: 1 + - uid: 11 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - uid: 12 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 + - uid: 13 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 + - uid: 14 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 + - uid: 15 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - uid: 16 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - uid: 17 + components: + - type: Transform + pos: 7.5,2.5 + parent: 1 + - uid: 18 + components: + - type: Transform + pos: 7.5,1.5 + parent: 1 + - uid: 19 + components: + - type: Transform + pos: 8.5,1.5 + parent: 1 + - uid: 20 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 + - uid: 21 + components: + - type: Transform + pos: 9.5,0.5 + parent: 1 + - uid: 22 + components: + - type: Transform + pos: 9.5,1.5 + parent: 1 + - uid: 23 + components: + - type: Transform + pos: 9.5,2.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: 8.5,2.5 + parent: 1 + - uid: 25 + components: + - type: Transform + pos: 8.5,3.5 + parent: 1 + - uid: 26 + components: + - type: Transform + pos: 9.5,3.5 + parent: 1 + - uid: 27 + components: + - type: Transform + pos: 9.5,4.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: 10.5,4.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: 10.5,3.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: 12.5,3.5 + parent: 1 + - uid: 31 + components: + - type: Transform + pos: 13.5,3.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: 13.5,2.5 + parent: 1 + - uid: 33 + components: + - type: Transform + pos: 13.5,1.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: 14.5,0.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: 14.5,1.5 + parent: 1 + - uid: 36 + components: + - type: Transform + pos: 14.5,2.5 + parent: 1 + - uid: 37 + components: + - type: Transform + pos: 14.5,3.5 + parent: 1 + - uid: 38 + components: + - type: Transform + pos: 15.5,3.5 + parent: 1 + - uid: 39 + components: + - type: Transform + pos: 15.5,2.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: 16.5,2.5 + parent: 1 + - uid: 41 + components: + - type: Transform + pos: 20.5,0.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: 20.5,1.5 + parent: 1 + - uid: 43 + components: + - type: Transform + pos: 19.5,1.5 + parent: 1 + - uid: 44 + components: + - type: Transform + pos: 19.5,2.5 + parent: 1 + - uid: 45 + components: + - type: Transform + pos: 19.5,3.5 + parent: 1 + - uid: 46 + components: + - type: Transform + pos: 20.5,3.5 + parent: 1 + - uid: 47 + components: + - type: Transform + pos: 20.5,2.5 + parent: 1 + - uid: 48 + components: + - type: Transform + pos: 21.5,2.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: 21.5,3.5 + parent: 1 + - uid: 50 + components: + - type: Transform + pos: 21.5,4.5 + parent: 1 + - uid: 51 + components: + - type: Transform + pos: 24.5,2.5 + parent: 1 + - uid: 52 + components: + - type: Transform + pos: 25.5,2.5 + parent: 1 + - uid: 53 + components: + - type: Transform + pos: 25.5,1.5 + parent: 1 + - uid: 54 + components: + - type: Transform + pos: 26.5,1.5 + parent: 1 + - uid: 55 + components: + - type: Transform + pos: 27.5,0.5 + parent: 1 + - uid: 56 + components: + - type: Transform + pos: 27.5,1.5 + parent: 1 + - uid: 57 + components: + - type: Transform + pos: 27.5,2.5 + parent: 1 + - uid: 58 + components: + - type: Transform + pos: 28.5,2.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: 26.5,2.5 + parent: 1 + - uid: 60 + components: + - type: Transform + pos: 27.5,3.5 + parent: 1 + - uid: 61 + components: + - type: Transform + pos: 26.5,3.5 + parent: 1 + - uid: 62 + components: + - type: Transform + pos: 25.5,3.5 + parent: 1 + - uid: 63 + components: + - type: Transform + pos: 25.5,4.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: 26.5,4.5 + parent: 1 + - uid: 65 + components: + - type: Transform + pos: 27.5,4.5 + parent: 1 + - uid: 66 + components: + - type: Transform + pos: 28.5,4.5 + parent: 1 + - uid: 67 + components: + - type: Transform + pos: 30.5,2.5 + parent: 1 + - uid: 68 + components: + - type: Transform + pos: 31.5,4.5 + parent: 1 + - uid: 69 + components: + - type: Transform + pos: 31.5,3.5 + parent: 1 + - uid: 70 + components: + - type: Transform + pos: 31.5,2.5 + parent: 1 + - uid: 71 + components: + - type: Transform + pos: 32.5,3.5 + parent: 1 + - uid: 72 + components: + - type: Transform + pos: 32.5,2.5 + parent: 1 + - uid: 73 + components: + - type: Transform + pos: 32.5,1.5 + parent: 1 + - uid: 74 + components: + - type: Transform + pos: 33.5,0.5 + parent: 1 + - uid: 75 + components: + - type: Transform + pos: 33.5,1.5 + parent: 1 + - uid: 76 + components: + - type: Transform + pos: 33.5,2.5 + parent: 1 + - uid: 77 + components: + - type: Transform + pos: 34.5,2.5 + parent: 1 + - uid: 78 + components: + - type: Transform + pos: 33.5,3.5 + parent: 1 + - uid: 79 + components: + - type: Transform + pos: 33.5,4.5 + parent: 1 + - uid: 80 + components: + - type: Transform + pos: 37.5,0.5 + parent: 1 + - uid: 81 + components: + - type: Transform + pos: 36.5,1.5 + parent: 1 + - uid: 82 + components: + - type: Transform + pos: 37.5,1.5 + parent: 1 + - uid: 83 + components: + - type: Transform + pos: 37.5,2.5 + parent: 1 + - uid: 84 + components: + - type: Transform + pos: 38.5,2.5 + parent: 1 + - uid: 85 + components: + - type: Transform + pos: 38.5,1.5 + parent: 1 + - uid: 86 + components: + - type: Transform + pos: 38.5,0.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: 39.5,1.5 + parent: 1 + - uid: 88 + components: + - type: Transform + pos: 39.5,2.5 + parent: 1 + - uid: 89 + components: + - type: Transform + pos: 40.5,2.5 + parent: 1 + - uid: 90 + components: + - type: Transform + pos: 40.5,3.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: 39.5,3.5 + parent: 1 + - uid: 92 + components: + - type: Transform + pos: 39.5,4.5 + parent: 1 + - uid: 93 + components: + - type: Transform + pos: 38.5,3.5 + parent: 1 +- proto: NFIceMineralHardRich + entities: + - uid: 94 + components: + - type: Transform + pos: 36.5,7.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: 37.5,7.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: 37.5,6.5 + parent: 1 + - uid: 97 + components: + - type: Transform + pos: 38.5,6.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: 38.5,7.5 + parent: 1 + - uid: 99 + components: + - type: Transform + pos: 39.5,7.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: 39.5,8.5 + parent: 1 + - uid: 101 + components: + - type: Transform + pos: 38.5,8.5 + parent: 1 + - uid: 102 + components: + - type: Transform + pos: 37.5,8.5 + parent: 1 + - uid: 103 + components: + - type: Transform + pos: 38.5,9.5 + parent: 1 + - uid: 104 + components: + - type: Transform + pos: 39.5,9.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: 40.5,9.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: 40.5,8.5 + parent: 1 + - uid: 107 + components: + - type: Transform + pos: 39.5,10.5 + parent: 1 + - uid: 108 + components: + - type: Transform + pos: 33.5,6.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: 33.5,7.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: 32.5,7.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: 34.5,8.5 + parent: 1 + - uid: 112 + components: + - type: Transform + pos: 33.5,8.5 + parent: 1 + - uid: 113 + components: + - type: Transform + pos: 33.5,9.5 + parent: 1 + - uid: 114 + components: + - type: Transform + pos: 33.5,10.5 + parent: 1 + - uid: 115 + components: + - type: Transform + pos: 32.5,9.5 + parent: 1 + - uid: 116 + components: + - type: Transform + pos: 32.5,8.5 + parent: 1 + - uid: 117 + components: + - type: Transform + pos: 31.5,8.5 + parent: 1 + - uid: 118 + components: + - type: Transform + pos: 31.5,9.5 + parent: 1 + - uid: 119 + components: + - type: Transform + pos: 30.5,8.5 + parent: 1 + - uid: 120 + components: + - type: Transform + pos: 31.5,10.5 + parent: 1 + - uid: 121 + components: + - type: Transform + pos: 27.5,6.5 + parent: 1 + - uid: 122 + components: + - type: Transform + pos: 27.5,7.5 + parent: 1 + - uid: 123 + components: + - type: Transform + pos: 25.5,7.5 + parent: 1 + - uid: 124 + components: + - type: Transform + pos: 26.5,7.5 + parent: 1 + - uid: 125 + components: + - type: Transform + pos: 26.5,8.5 + parent: 1 + - uid: 126 + components: + - type: Transform + pos: 25.5,8.5 + parent: 1 + - uid: 127 + components: + - type: Transform + pos: 24.5,8.5 + parent: 1 + - uid: 128 + components: + - type: Transform + pos: 25.5,9.5 + parent: 1 + - uid: 129 + components: + - type: Transform + pos: 25.5,10.5 + parent: 1 + - uid: 130 + components: + - type: Transform + pos: 26.5,10.5 + parent: 1 + - uid: 131 + components: + - type: Transform + pos: 26.5,9.5 + parent: 1 + - uid: 132 + components: + - type: Transform + pos: 27.5,9.5 + parent: 1 + - uid: 133 + components: + - type: Transform + pos: 27.5,8.5 + parent: 1 + - uid: 134 + components: + - type: Transform + pos: 28.5,8.5 + parent: 1 + - uid: 135 + components: + - type: Transform + pos: 27.5,10.5 + parent: 1 + - uid: 136 + components: + - type: Transform + pos: 28.5,10.5 + parent: 1 + - uid: 137 + components: + - type: Transform + pos: 20.5,6.5 + parent: 1 + - uid: 138 + components: + - type: Transform + pos: 20.5,7.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: 19.5,7.5 + parent: 1 + - uid: 140 + components: + - type: Transform + pos: 19.5,8.5 + parent: 1 + - uid: 141 + components: + - type: Transform + pos: 20.5,8.5 + parent: 1 + - uid: 142 + components: + - type: Transform + pos: 21.5,8.5 + parent: 1 + - uid: 143 + components: + - type: Transform + pos: 21.5,9.5 + parent: 1 + - uid: 144 + components: + - type: Transform + pos: 20.5,9.5 + parent: 1 + - uid: 145 + components: + - type: Transform + pos: 19.5,9.5 + parent: 1 + - uid: 146 + components: + - type: Transform + pos: 21.5,10.5 + parent: 1 + - uid: 147 + components: + - type: Transform + pos: 14.5,6.5 + parent: 1 + - uid: 148 + components: + - type: Transform + pos: 14.5,7.5 + parent: 1 + - uid: 149 + components: + - type: Transform + pos: 13.5,7.5 + parent: 1 + - uid: 150 + components: + - type: Transform + pos: 13.5,8.5 + parent: 1 + - uid: 151 + components: + - type: Transform + pos: 14.5,8.5 + parent: 1 + - uid: 152 + components: + - type: Transform + pos: 16.5,8.5 + parent: 1 + - uid: 153 + components: + - type: Transform + pos: 15.5,8.5 + parent: 1 + - uid: 154 + components: + - type: Transform + pos: 15.5,9.5 + parent: 1 + - uid: 155 + components: + - type: Transform + pos: 14.5,9.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: 13.5,9.5 + parent: 1 + - uid: 157 + components: + - type: Transform + pos: 12.5,9.5 + parent: 1 + - uid: 158 + components: + - type: Transform + pos: 8.5,6.5 + parent: 1 + - uid: 159 + components: + - type: Transform + pos: 9.5,6.5 + parent: 1 + - uid: 160 + components: + - type: Transform + pos: 9.5,7.5 + parent: 1 + - uid: 161 + components: + - type: Transform + pos: 8.5,7.5 + parent: 1 + - uid: 162 + components: + - type: Transform + pos: 7.5,7.5 + parent: 1 + - uid: 163 + components: + - type: Transform + pos: 6.5,8.5 + parent: 1 + - uid: 164 + components: + - type: Transform + pos: 7.5,8.5 + parent: 1 + - uid: 165 + components: + - type: Transform + pos: 8.5,8.5 + parent: 1 + - uid: 166 + components: + - type: Transform + pos: 9.5,8.5 + parent: 1 + - uid: 167 + components: + - type: Transform + pos: 8.5,9.5 + parent: 1 + - uid: 168 + components: + - type: Transform + pos: 9.5,9.5 + parent: 1 + - uid: 169 + components: + - type: Transform + pos: 9.5,10.5 + parent: 1 + - uid: 170 + components: + - type: Transform + pos: 10.5,10.5 + parent: 1 + - uid: 171 + components: + - type: Transform + pos: 10.5,9.5 + parent: 1 + - uid: 172 + components: + - type: Transform + pos: 2.5,6.5 + parent: 1 + - uid: 173 + components: + - type: Transform + pos: 3.5,6.5 + parent: 1 + - uid: 174 + components: + - type: Transform + pos: 3.5,7.5 + parent: 1 + - uid: 175 + components: + - type: Transform + pos: 2.5,7.5 + parent: 1 + - uid: 176 + components: + - type: Transform + pos: 1.5,8.5 + parent: 1 + - uid: 177 + components: + - type: Transform + pos: 2.5,8.5 + parent: 1 + - uid: 178 + components: + - type: Transform + pos: 2.5,9.5 + parent: 1 + - uid: 179 + components: + - type: Transform + pos: 1.5,9.5 + parent: 1 + - uid: 180 + components: + - type: Transform + pos: 1.5,10.5 + parent: 1 + - uid: 181 + components: + - type: Transform + pos: 2.5,10.5 + parent: 1 + - uid: 182 + components: + - type: Transform + pos: 3.5,9.5 + parent: 1 + - uid: 183 + components: + - type: Transform + pos: 3.5,8.5 + parent: 1 + - uid: 184 + components: + - type: Transform + pos: 4.5,8.5 + parent: 1 + - uid: 185 + components: + - type: Transform + pos: 4.5,9.5 + parent: 1 +- proto: NFRockMineralHardRich + entities: + - uid: 546 + components: + - type: Transform + pos: 40.5,38.5 + parent: 1 + - uid: 553 + components: + - type: Transform + pos: 37.5,36.5 + parent: 1 + - uid: 554 + components: + - type: Transform + pos: 38.5,36.5 + parent: 1 + - uid: 555 + components: + - type: Transform + pos: 38.5,37.5 + parent: 1 + - uid: 556 + components: + - type: Transform + pos: 37.5,37.5 + parent: 1 + - uid: 557 + components: + - type: Transform + pos: 36.5,37.5 + parent: 1 + - uid: 558 + components: + - type: Transform + pos: 37.5,38.5 + parent: 1 + - uid: 559 + components: + - type: Transform + pos: 38.5,38.5 + parent: 1 + - uid: 560 + components: + - type: Transform + pos: 39.5,38.5 + parent: 1 + - uid: 561 + components: + - type: Transform + pos: 39.5,37.5 + parent: 1 + - uid: 562 + components: + - type: Transform + pos: 38.5,39.5 + parent: 1 + - uid: 563 + components: + - type: Transform + pos: 39.5,39.5 + parent: 1 + - uid: 564 + components: + - type: Transform + pos: 39.5,40.5 + parent: 1 + - uid: 565 + components: + - type: Transform + pos: 40.5,39.5 + parent: 1 + - uid: 566 + components: + - type: Transform + pos: 33.5,36.5 + parent: 1 + - uid: 567 + components: + - type: Transform + pos: 33.5,37.5 + parent: 1 + - uid: 568 + components: + - type: Transform + pos: 33.5,38.5 + parent: 1 + - uid: 569 + components: + - type: Transform + pos: 34.5,38.5 + parent: 1 + - uid: 570 + components: + - type: Transform + pos: 33.5,39.5 + parent: 1 + - uid: 571 + components: + - type: Transform + pos: 33.5,40.5 + parent: 1 + - uid: 572 + components: + - type: Transform + pos: 32.5,39.5 + parent: 1 + - uid: 573 + components: + - type: Transform + pos: 32.5,38.5 + parent: 1 + - uid: 574 + components: + - type: Transform + pos: 32.5,37.5 + parent: 1 + - uid: 575 + components: + - type: Transform + pos: 31.5,38.5 + parent: 1 + - uid: 576 + components: + - type: Transform + pos: 31.5,39.5 + parent: 1 + - uid: 577 + components: + - type: Transform + pos: 31.5,40.5 + parent: 1 + - uid: 578 + components: + - type: Transform + pos: 30.5,38.5 + parent: 1 + - uid: 579 + components: + - type: Transform + pos: 28.5,38.5 + parent: 1 + - uid: 580 + components: + - type: Transform + pos: 28.5,40.5 + parent: 1 + - uid: 581 + components: + - type: Transform + pos: 27.5,40.5 + parent: 1 + - uid: 582 + components: + - type: Transform + pos: 27.5,39.5 + parent: 1 + - uid: 583 + components: + - type: Transform + pos: 27.5,38.5 + parent: 1 + - uid: 584 + components: + - type: Transform + pos: 27.5,37.5 + parent: 1 + - uid: 585 + components: + - type: Transform + pos: 27.5,36.5 + parent: 1 + - uid: 586 + components: + - type: Transform + pos: 26.5,37.5 + parent: 1 + - uid: 587 + components: + - type: Transform + pos: 25.5,37.5 + parent: 1 + - uid: 588 + components: + - type: Transform + pos: 25.5,38.5 + parent: 1 + - uid: 589 + components: + - type: Transform + pos: 24.5,38.5 + parent: 1 + - uid: 590 + components: + - type: Transform + pos: 26.5,38.5 + parent: 1 + - uid: 591 + components: + - type: Transform + pos: 26.5,39.5 + parent: 1 + - uid: 592 + components: + - type: Transform + pos: 25.5,39.5 + parent: 1 + - uid: 593 + components: + - type: Transform + pos: 25.5,40.5 + parent: 1 + - uid: 594 + components: + - type: Transform + pos: 26.5,40.5 + parent: 1 + - uid: 595 + components: + - type: Transform + pos: 20.5,36.5 + parent: 1 + - uid: 596 + components: + - type: Transform + pos: 20.5,37.5 + parent: 1 + - uid: 597 + components: + - type: Transform + pos: 19.5,37.5 + parent: 1 + - uid: 598 + components: + - type: Transform + pos: 19.5,38.5 + parent: 1 + - uid: 599 + components: + - type: Transform + pos: 20.5,38.5 + parent: 1 + - uid: 600 + components: + - type: Transform + pos: 21.5,38.5 + parent: 1 + - uid: 601 + components: + - type: Transform + pos: 21.5,39.5 + parent: 1 + - uid: 602 + components: + - type: Transform + pos: 21.5,40.5 + parent: 1 + - uid: 603 + components: + - type: Transform + pos: 20.5,39.5 + parent: 1 + - uid: 604 + components: + - type: Transform + pos: 19.5,39.5 + parent: 1 + - uid: 605 + components: + - type: Transform + pos: 14.5,36.5 + parent: 1 + - uid: 606 + components: + - type: Transform + pos: 14.5,37.5 + parent: 1 + - uid: 607 + components: + - type: Transform + pos: 14.5,38.5 + parent: 1 + - uid: 608 + components: + - type: Transform + pos: 15.5,38.5 + parent: 1 + - uid: 609 + components: + - type: Transform + pos: 16.5,38.5 + parent: 1 + - uid: 610 + components: + - type: Transform + pos: 15.5,39.5 + parent: 1 + - uid: 611 + components: + - type: Transform + pos: 14.5,39.5 + parent: 1 + - uid: 612 + components: + - type: Transform + pos: 13.5,39.5 + parent: 1 + - uid: 613 + components: + - type: Transform + pos: 13.5,38.5 + parent: 1 + - uid: 614 + components: + - type: Transform + pos: 13.5,37.5 + parent: 1 + - uid: 615 + components: + - type: Transform + pos: 12.5,39.5 + parent: 1 + - uid: 616 + components: + - type: Transform + pos: 9.5,36.5 + parent: 1 + - uid: 617 + components: + - type: Transform + pos: 8.5,36.5 + parent: 1 + - uid: 618 + components: + - type: Transform + pos: 8.5,37.5 + parent: 1 + - uid: 619 + components: + - type: Transform + pos: 9.5,37.5 + parent: 1 + - uid: 620 + components: + - type: Transform + pos: 9.5,38.5 + parent: 1 + - uid: 621 + components: + - type: Transform + pos: 8.5,38.5 + parent: 1 + - uid: 622 + components: + - type: Transform + pos: 7.5,38.5 + parent: 1 + - uid: 623 + components: + - type: Transform + pos: 7.5,37.5 + parent: 1 + - uid: 624 + components: + - type: Transform + pos: 6.5,38.5 + parent: 1 + - uid: 625 + components: + - type: Transform + pos: 8.5,39.5 + parent: 1 + - uid: 626 + components: + - type: Transform + pos: 10.5,39.5 + parent: 1 + - uid: 627 + components: + - type: Transform + pos: 9.5,39.5 + parent: 1 + - uid: 628 + components: + - type: Transform + pos: 9.5,40.5 + parent: 1 + - uid: 629 + components: + - type: Transform + pos: 10.5,40.5 + parent: 1 + - uid: 630 + components: + - type: Transform + pos: 3.5,36.5 + parent: 1 + - uid: 631 + components: + - type: Transform + pos: 2.5,36.5 + parent: 1 + - uid: 632 + components: + - type: Transform + pos: 3.5,37.5 + parent: 1 + - uid: 633 + components: + - type: Transform + pos: 2.5,37.5 + parent: 1 + - uid: 634 + components: + - type: Transform + pos: 2.5,38.5 + parent: 1 + - uid: 635 + components: + - type: Transform + pos: 3.5,38.5 + parent: 1 + - uid: 636 + components: + - type: Transform + pos: 4.5,38.5 + parent: 1 + - uid: 637 + components: + - type: Transform + pos: 4.5,39.5 + parent: 1 + - uid: 638 + components: + - type: Transform + pos: 3.5,39.5 + parent: 1 + - uid: 639 + components: + - type: Transform + pos: 2.5,39.5 + parent: 1 + - uid: 640 + components: + - type: Transform + pos: 2.5,40.5 + parent: 1 + - uid: 641 + components: + - type: Transform + pos: 1.5,40.5 + parent: 1 + - uid: 642 + components: + - type: Transform + pos: 1.5,38.5 + parent: 1 + - uid: 643 + components: + - type: Transform + pos: 1.5,39.5 + parent: 1 +- proto: NFSandMineralHardRich + entities: + - uid: 462 + components: + - type: Transform + pos: 2.5,30.5 + parent: 1 + - uid: 463 + components: + - type: Transform + pos: 3.5,30.5 + parent: 1 + - uid: 464 + components: + - type: Transform + pos: 3.5,31.5 + parent: 1 + - uid: 465 + components: + - type: Transform + pos: 2.5,31.5 + parent: 1 + - uid: 466 + components: + - type: Transform + pos: 2.5,32.5 + parent: 1 + - uid: 467 + components: + - type: Transform + pos: 1.5,32.5 + parent: 1 + - uid: 468 + components: + - type: Transform + pos: 1.5,33.5 + parent: 1 + - uid: 469 + components: + - type: Transform + pos: 1.5,34.5 + parent: 1 + - uid: 470 + components: + - type: Transform + pos: 2.5,34.5 + parent: 1 + - uid: 471 + components: + - type: Transform + pos: 2.5,33.5 + parent: 1 + - uid: 472 + components: + - type: Transform + pos: 3.5,33.5 + parent: 1 + - uid: 473 + components: + - type: Transform + pos: 3.5,32.5 + parent: 1 + - uid: 474 + components: + - type: Transform + pos: 4.5,32.5 + parent: 1 + - uid: 475 + components: + - type: Transform + pos: 4.5,33.5 + parent: 1 + - uid: 476 + components: + - type: Transform + pos: 6.5,32.5 + parent: 1 + - uid: 477 + components: + - type: Transform + pos: 7.5,32.5 + parent: 1 + - uid: 478 + components: + - type: Transform + pos: 7.5,31.5 + parent: 1 + - uid: 479 + components: + - type: Transform + pos: 8.5,31.5 + parent: 1 + - uid: 480 + components: + - type: Transform + pos: 8.5,30.5 + parent: 1 + - uid: 481 + components: + - type: Transform + pos: 9.5,30.5 + parent: 1 + - uid: 482 + components: + - type: Transform + pos: 9.5,31.5 + parent: 1 + - uid: 483 + components: + - type: Transform + pos: 9.5,32.5 + parent: 1 + - uid: 484 + components: + - type: Transform + pos: 8.5,32.5 + parent: 1 + - uid: 485 + components: + - type: Transform + pos: 8.5,33.5 + parent: 1 + - uid: 486 + components: + - type: Transform + pos: 9.5,33.5 + parent: 1 + - uid: 487 + components: + - type: Transform + pos: 9.5,34.5 + parent: 1 + - uid: 488 + components: + - type: Transform + pos: 10.5,34.5 + parent: 1 + - uid: 489 + components: + - type: Transform + pos: 10.5,33.5 + parent: 1 + - uid: 490 + components: + - type: Transform + pos: 12.5,33.5 + parent: 1 + - uid: 491 + components: + - type: Transform + pos: 13.5,33.5 + parent: 1 + - uid: 492 + components: + - type: Transform + pos: 14.5,33.5 + parent: 1 + - uid: 493 + components: + - type: Transform + pos: 15.5,33.5 + parent: 1 + - uid: 494 + components: + - type: Transform + pos: 15.5,32.5 + parent: 1 + - uid: 495 + components: + - type: Transform + pos: 16.5,32.5 + parent: 1 + - uid: 496 + components: + - type: Transform + pos: 14.5,32.5 + parent: 1 + - uid: 497 + components: + - type: Transform + pos: 13.5,32.5 + parent: 1 + - uid: 498 + components: + - type: Transform + pos: 13.5,31.5 + parent: 1 + - uid: 499 + components: + - type: Transform + pos: 14.5,31.5 + parent: 1 + - uid: 500 + components: + - type: Transform + pos: 14.5,30.5 + parent: 1 + - uid: 501 + components: + - type: Transform + pos: 20.5,30.5 + parent: 1 + - uid: 502 + components: + - type: Transform + pos: 20.5,31.5 + parent: 1 + - uid: 503 + components: + - type: Transform + pos: 19.5,31.5 + parent: 1 + - uid: 504 + components: + - type: Transform + pos: 19.5,32.5 + parent: 1 + - uid: 505 + components: + - type: Transform + pos: 19.5,33.5 + parent: 1 + - uid: 506 + components: + - type: Transform + pos: 20.5,33.5 + parent: 1 + - uid: 507 + components: + - type: Transform + pos: 20.5,32.5 + parent: 1 + - uid: 508 + components: + - type: Transform + pos: 21.5,32.5 + parent: 1 + - uid: 509 + components: + - type: Transform + pos: 21.5,33.5 + parent: 1 + - uid: 510 + components: + - type: Transform + pos: 21.5,34.5 + parent: 1 + - uid: 511 + components: + - type: Transform + pos: 24.5,32.5 + parent: 1 + - uid: 512 + components: + - type: Transform + pos: 25.5,32.5 + parent: 1 + - uid: 513 + components: + - type: Transform + pos: 25.5,31.5 + parent: 1 + - uid: 514 + components: + - type: Transform + pos: 26.5,31.5 + parent: 1 + - uid: 515 + components: + - type: Transform + pos: 27.5,31.5 + parent: 1 + - uid: 516 + components: + - type: Transform + pos: 27.5,30.5 + parent: 1 + - uid: 517 + components: + - type: Transform + pos: 28.5,32.5 + parent: 1 + - uid: 518 + components: + - type: Transform + pos: 27.5,32.5 + parent: 1 + - uid: 519 + components: + - type: Transform + pos: 26.5,32.5 + parent: 1 + - uid: 520 + components: + - type: Transform + pos: 26.5,33.5 + parent: 1 + - uid: 521 + components: + - type: Transform + pos: 25.5,33.5 + parent: 1 + - uid: 522 + components: + - type: Transform + pos: 25.5,34.5 + parent: 1 + - uid: 523 + components: + - type: Transform + pos: 26.5,34.5 + parent: 1 + - uid: 524 + components: + - type: Transform + pos: 27.5,34.5 + parent: 1 + - uid: 525 + components: + - type: Transform + pos: 28.5,34.5 + parent: 1 + - uid: 526 + components: + - type: Transform + pos: 27.5,33.5 + parent: 1 + - uid: 527 + components: + - type: Transform + pos: 30.5,32.5 + parent: 1 + - uid: 528 + components: + - type: Transform + pos: 31.5,32.5 + parent: 1 + - uid: 529 + components: + - type: Transform + pos: 31.5,33.5 + parent: 1 + - uid: 530 + components: + - type: Transform + pos: 31.5,34.5 + parent: 1 + - uid: 531 + components: + - type: Transform + pos: 32.5,33.5 + parent: 1 + - uid: 532 + components: + - type: Transform + pos: 33.5,33.5 + parent: 1 + - uid: 533 + components: + - type: Transform + pos: 33.5,34.5 + parent: 1 + - uid: 534 + components: + - type: Transform + pos: 32.5,32.5 + parent: 1 + - uid: 535 + components: + - type: Transform + pos: 33.5,32.5 + parent: 1 + - uid: 536 + components: + - type: Transform + pos: 34.5,32.5 + parent: 1 + - uid: 537 + components: + - type: Transform + pos: 32.5,31.5 + parent: 1 + - uid: 538 + components: + - type: Transform + pos: 33.5,31.5 + parent: 1 + - uid: 539 + components: + - type: Transform + pos: 33.5,30.5 + parent: 1 + - uid: 540 + components: + - type: Transform + pos: 36.5,31.5 + parent: 1 + - uid: 541 + components: + - type: Transform + pos: 37.5,31.5 + parent: 1 + - uid: 542 + components: + - type: Transform + pos: 37.5,30.5 + parent: 1 + - uid: 543 + components: + - type: Transform + pos: 38.5,30.5 + parent: 1 + - uid: 544 + components: + - type: Transform + pos: 38.5,31.5 + parent: 1 + - uid: 545 + components: + - type: Transform + pos: 39.5,31.5 + parent: 1 + - uid: 547 + components: + - type: Transform + pos: 38.5,32.5 + parent: 1 + - uid: 548 + components: + - type: Transform + pos: 37.5,32.5 + parent: 1 + - uid: 549 + components: + - type: Transform + pos: 38.5,33.5 + parent: 1 + - uid: 550 + components: + - type: Transform + pos: 39.5,33.5 + parent: 1 + - uid: 551 + components: + - type: Transform + pos: 39.5,34.5 + parent: 1 + - uid: 552 + components: + - type: Transform + pos: 40.5,33.5 + parent: 1 + - uid: 644 + components: + - type: Transform + pos: 39.5,32.5 + parent: 1 + - uid: 645 + components: + - type: Transform + pos: 40.5,32.5 + parent: 1 +... diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/cannons.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/cannons.yml index 4abd8eb53ce..b47277d5407 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/cannons.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/cannons.yml @@ -76,8 +76,8 @@ - type: entity id: ShuttleGunKineticCircuitboard parent: BaseMachineCircuitboard - name: PTK-800 "Matter Dematerializer" machine board - description: A machine printed circuit board for an PTK-800 "Matter Dematerializer". + name: PTK-1500e "Matter Dematerializer" machine board # Frontier: 800<1500e + description: A machine printed circuit board for an PTK-1500e "Matter Dematerializer". # Frontier: 800<1500e suffix: DO NOT MAP, Machine Board components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 654422a3149..526259ef63a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -309,14 +309,12 @@ types: Heat: 14 # mining laser real -# - type: GatheringProjectile # Frontier +# - type: GatheringProjectile # Frontier - if restoring, add MiningGatheringSoft - type: Tag tags: - EmitterBolt - type: TimedDespawn lifetime: 3 - - type: Reflective # Frontier - reflective: ShuttleKinetic # Frontier - type: entity name: watcher bolt @@ -405,6 +403,7 @@ - type: TimedDespawn lifetime: 0.4 - type: GatheringProjectile + - type: MiningGatheringSoft # Frontier - type: entity id: BulletKineticShuttle @@ -414,11 +413,10 @@ - type: Sprite noRot: false sprite: Objects/Weapons/Guns/Projectiles/magic.rsi + color: "#FF8888" # Frontier: color it red vs. handheld bolts layers: - state: chronobolt shader: unshaded - - type: Reflective # Frontier - reflective: ShuttleKinetic # Frontier - type: Projectile impactEffect: BulletImpactEffectKinetic damage: @@ -431,9 +429,10 @@ lifetime: 1 # Frontier 1.5<1 - type: PointLight radius: 2.5 - color: white + color: "#FF8888" # Frontier: white Date: Tue, 24 Dec 2024 23:05:28 +0000 Subject: [PATCH 14/20] Automatic Changelog (#2521) --- Resources/Changelog/Frontier.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 457f28fe6bd..62a7ab1e93d 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -6084,3 +6084,15 @@ Entries: message: Handicomm mics can now be toggled with an alt-click id: 5609 time: '2024-12-24T22:48:18.0000000+00:00' +- author: whatston3 + changes: + - type: Tweak + message: >- + Walls on asteroids can now contain ore denser than regular rocks and + require diamond drills, a holopickaxe, or a PTK to mine. + - type: Tweak + message: >- + PTK bolts destroy ore in softer rock, but "walls" no longer reflect + shots. + id: 5610 + time: '2024-12-24T23:05:02.0000000+00:00' From c149663e54327bfcbec0b596aa7921801baaf239 Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Wed, 25 Dec 2024 04:31:37 +0200 Subject: [PATCH 15/20] Update EECCVars.cs (#2605) --- Content.Shared/_EE/CCVar/EECCVars.cs | 127 +++++++++++++-------------- 1 file changed, 62 insertions(+), 65 deletions(-) diff --git a/Content.Shared/_EE/CCVar/EECCVars.cs b/Content.Shared/_EE/CCVar/EECCVars.cs index b16d1fa01f0..378559a5037 100644 --- a/Content.Shared/_EE/CCVar/EECCVars.cs +++ b/Content.Shared/_EE/CCVar/EECCVars.cs @@ -1,81 +1,78 @@ -using Robust.Shared; using Robust.Shared.Configuration; -namespace Content.Shared._EE.CCVar +namespace Content.Shared._EE.CCVar; + +[CVarDefs] // ReSharper disable once InconsistentNaming +public sealed class EECCVars { - // ReSharper disable once InconsistentNaming - [CVarDefs] - public sealed class EECCVars : CVars - { - #region Jetpack System + #region Jetpack System - /// - /// When true, Jetpacks can be enabled anywhere, even in gravity. - /// - public static readonly CVarDef JetpackEnableAnywhere = - CVarDef.Create("ee.jetpack.enable_anywhere", false, CVar.REPLICATED); + /// + /// When true, Jetpacks can be enabled anywhere, even in gravity. + /// + public static readonly CVarDef JetpackEnableAnywhere = + CVarDef.Create("ee.jetpack.enable_anywhere", false, CVar.REPLICATED); - /// - /// When true, jetpacks can be enabled on grids that have zero gravity. - /// - public static readonly CVarDef JetpackEnableInNoGravity = - CVarDef.Create("ee.jetpack.enable_in_no_gravity", true, CVar.REPLICATED); + /// + /// When true, jetpacks can be enabled on grids that have zero gravity. + /// + public static readonly CVarDef JetpackEnableInNoGravity = + CVarDef.Create("ee.jetpack.enable_in_no_gravity", true, CVar.REPLICATED); - #endregion + #endregion - #region Contests System + #region Contests System - /// - /// The MASTER TOGGLE for the entire Contests System. - /// ALL CONTESTS BELOW, regardless of type or setting will output 1f when false. - /// - public static readonly CVarDef DoContestsSystem = - CVarDef.Create("contests.do_contests_system", true, CVar.REPLICATED | CVar.SERVER); + /// + /// The MASTER TOGGLE for the entire Contests System. + /// ALL CONTESTS BELOW, regardless of type or setting will output 1f when false. + /// + public static readonly CVarDef DoContestsSystem = + CVarDef.Create("ee.contests.do_contests_system", true, CVar.REPLICATED | CVar.SERVER); - /// - /// Contest functions normally include an optional override to bypass the clamp set by max_percentage. - /// This CVar disables the bypass when false, forcing all implementations to comply with max_percentage. - /// - public static readonly CVarDef AllowClampOverride = - CVarDef.Create("contests.allow_clamp_override", true, CVar.REPLICATED | CVar.SERVER); - /// - /// Toggles all MassContest functions. All mass contests output 1f when false - /// - public static readonly CVarDef DoMassContests = - CVarDef.Create("contests.do_mass_contests", true, CVar.REPLICATED | CVar.SERVER); + /// + /// Contest functions normally include an optional override to bypass the clamp set by max_percentage. + /// This CVar disables the bypass when false, forcing all implementations to comply with max_percentage. + /// + public static readonly CVarDef AllowClampOverride = + CVarDef.Create("ee.contests.allow_clamp_override", true, CVar.REPLICATED | CVar.SERVER); + /// + /// Toggles all MassContest functions. All mass contests output 1f when false + /// + public static readonly CVarDef DoMassContests = + CVarDef.Create("ee.contests.do_mass_contests", true, CVar.REPLICATED | CVar.SERVER); - /// - /// Toggles all StaminaContest functions. All stamina contests output 1f when false - /// - public static readonly CVarDef DoStaminaContests = - CVarDef.Create("contests.do_stamina_contests", true, CVar.REPLICATED | CVar.SERVER); + /// + /// Toggles all StaminaContest functions. All stamina contests output 1f when false + /// + public static readonly CVarDef DoStaminaContests = + CVarDef.Create("ee.contests.do_stamina_contests", true, CVar.REPLICATED | CVar.SERVER); - /// - /// Toggles all HealthContest functions. All health contests output 1f when false - /// - public static readonly CVarDef DoHealthContests = - CVarDef.Create("contests.do_health_contests", true, CVar.REPLICATED | CVar.SERVER); + /// + /// Toggles all HealthContest functions. All health contests output 1f when false + /// + public static readonly CVarDef DoHealthContests = + CVarDef.Create("ee.contests.do_health_contests", true, CVar.REPLICATED | CVar.SERVER); - /// - /// Toggles all MindContest functions. All mind contests output 1f when false. - /// MindContests are not currently implemented, and are awaiting completion of the Psionic Refactor - /// - public static readonly CVarDef DoMindContests = - CVarDef.Create("contests.do_mind_contests", true, CVar.REPLICATED | CVar.SERVER); + /// + /// Toggles all MindContest functions. All mind contests output 1f when false. + /// MindContests are not currently implemented, and are awaiting completion of the Psionic Refactor + /// + public static readonly CVarDef DoMindContests = + CVarDef.Create("ee.contests.do_mind_contests", true, CVar.REPLICATED | CVar.SERVER); - /// - /// Toggles all MoodContest functions. All mood contests output 1f when false. - /// - public static readonly CVarDef DoMoodContests = - CVarDef.Create("contests.do_mood_contests", true, CVar.REPLICATED | CVar.SERVER); + /// + /// Toggles all MoodContest functions. All mood contests output 1f when false. + /// + public static readonly CVarDef DoMoodContests = + CVarDef.Create("ee.contests.do_mood_contests", true, CVar.REPLICATED | CVar.SERVER); - /// - /// The maximum amount that Mass Contests can modify a physics multiplier, given as a +/- percentage - /// Default of 0.25f outputs between * 0.75f and 1.25f - /// - public static readonly CVarDef MassContestsMaxPercentage = - CVarDef.Create("contests.max_percentage", 0.25f, CVar.REPLICATED | CVar.SERVER); + /// + /// The maximum amount that Mass Contests can modify a physics multiplier, given as a +/- percentage + /// Default of 0.25f outputs between * 0.75f and 1.25f + /// + public static readonly CVarDef MassContestsMaxPercentage = + CVarDef.Create("ee.contests.max_percentage", 0.25f, CVar.REPLICATED | CVar.SERVER); - #endregion - } + #endregion } From bef531774520f16db52b5154d221984062455a23 Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Wed, 25 Dec 2024 19:49:53 -0500 Subject: [PATCH 16/20] Flatpacks: rotatable, soil needs a shovel (#2608) * Rotatable flatpacks * soil crates need to be dug * Directional sprites for docking airlock flatpacks --- .../Construction/SharedFlatpackSystem.cs | 2 ++ .../Entities/Objects/Devices/flatpack.yml | 1 + .../_NF/Entities/Objects/Devices/flatpacks.yml | 17 ++++++++++++----- .../command_airlock_directional.png | Bin 0 -> 464 bytes .../_NF/Objects/Devices/flatpack.rsi/meta.json | 3 +++ 5 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 Resources/Textures/_NF/Objects/Devices/flatpack.rsi/command_airlock_directional.png diff --git a/Content.Shared/Construction/SharedFlatpackSystem.cs b/Content.Shared/Construction/SharedFlatpackSystem.cs index a83948b1674..9644800d773 100644 --- a/Content.Shared/Construction/SharedFlatpackSystem.cs +++ b/Content.Shared/Construction/SharedFlatpackSystem.cs @@ -93,6 +93,8 @@ private void OnFlatpackInteractUsing(Entity ent, ref Interact if (_net.IsServer) { var spawn = Spawn(comp.Entity, _map.GridTileToLocal(grid, gridComp, buildPos)); + if (TryComp(spawn, out TransformComponent? spawnXform)) // Frontier: rotatable flatpacks + spawnXform.LocalRotation = xform.LocalRotation.GetCardinalDir().ToAngle(); // Frontier: rotatable flatpacks _adminLogger.Add(LogType.Construction, LogImpact.Low, $"{ToPrettyString(args.User):player} unpacked {ToPrettyString(spawn):entity} at {xform.Coordinates} from {ToPrettyString(uid):entity}"); diff --git a/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml b/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml index 8a6424ffcc7..c6f9c7449f9 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/flatpack.yml @@ -35,6 +35,7 @@ cpu_supply: "#A46106" - type: StaticPrice price: 250 + - type: Rotatable # Frontier - type: entity parent: BaseFlatpack diff --git a/Resources/Prototypes/_NF/Entities/Objects/Devices/flatpacks.yml b/Resources/Prototypes/_NF/Entities/Objects/Devices/flatpacks.yml index 12971234f6b..27abddaeaa7 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Devices/flatpacks.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Devices/flatpacks.yml @@ -370,11 +370,13 @@ - type: entity parent: UniformPrinterFlatpack id: HydroponicsSoilNutritionFlatpack - name: crate with fertile soil - description: A crate with fertile soil used for constructing a soil bed for growing. + name: crate of fertile soil + description: A crate of fertile soil used for constructing a soil bed for growing. Spread it around with a shovel. components: - type: Flatpack entity: HydroponicsSoilNutrition + qualityNeeded: Digging + unpackSound: /Audio/Items/shovel_dig.ogg - type: Sprite layers: - state: soil @@ -382,11 +384,13 @@ - type: entity parent: UniformPrinterFlatpack id: HydroponicsSoilEmptyFlatpack - name: crate with soil - description: A crate with soil used for constructing a soil bed for growing. + name: crate of soil + description: A crate of soil used for constructing a soil bed for growing. Spread it around with a shovel. components: - type: Flatpack entity: HydroponicsSoilEmpty + qualityNeeded: Digging + unpackSound: /Audio/Items/shovel_dig.ogg - type: Sprite layers: - state: soil @@ -669,9 +673,12 @@ components: - type: Flatpack entity: AirlockShuttle + - type: Sprite + layers: + - state: command_airlock_directional - type: entity - parent: AirlockFlatpack + parent: AirlockShuttleFlatpack id: AirlockGlassShuttleFlatpack name: docking glass airlock flatpack description: A flatpack used for constructing a glass docking airlock. diff --git a/Resources/Textures/_NF/Objects/Devices/flatpack.rsi/command_airlock_directional.png b/Resources/Textures/_NF/Objects/Devices/flatpack.rsi/command_airlock_directional.png new file mode 100644 index 0000000000000000000000000000000000000000..49f01a01d363dc3c5c37ca96cc52d05a5603201d GIT binary patch literal 464 zcmV;>0WbcEP)U#buwr|RDgxW2mmGNVr?JRXmA z9PBtQI{Ur^NTsLhv$Hc8g92HS)F)P`Rm&~D;lw17`vXkN#Cug-TwF4pn&$E0;b#Ev z708lA2m{<>qWx`*ZUuyaEJ?=35?YmO0RU8bGekv=!d@}(uv|V%r8h%_YWDzY)v~YZ zTt3_4`3P65mKo8Ghn^0+tz$1g>rtQOauz^(z1XYujf4+}%}t^FIUVwmJsb z-Ixa;nH=}ce+^(bG1(j!_KFB$u)o!~^Zl(XLKwbB_|dPUz+YeuNTl+75T8jY4{KB+ zy9oebS|;}LJVF@kEIcz3i#OMvT!;13A(ZkkEz`HpaooVO1Fyh)Rn75B%*H-U^W-|s zaQiULOU!QZ-(24WHX_jIhKoyc-|B=XN9S6dHdLrkq22&D0)qfGL`@_B0000 Date: Thu, 26 Dec 2024 00:50:19 +0000 Subject: [PATCH 17/20] Automatic Changelog (#2608) --- Resources/Changelog/Frontier.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 62a7ab1e93d..12d09316d55 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -6096,3 +6096,11 @@ Entries: shots. id: 5610 time: '2024-12-24T23:05:02.0000000+00:00' +- author: whatston3 + changes: + - type: Add + message: Flatpacks can be rotated, and respect their rotation when unpacked. + - type: Tweak + message: Soil crates now must be "assembled" with a shovel. + id: 5611 + time: '2024-12-26T00:49:53.0000000+00:00' From 33126876b3cb0bb4403b1ad81dca23119d2d4fbc Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Thu, 26 Dec 2024 01:05:24 -0500 Subject: [PATCH 18/20] trade outpost: catwalks in cb1 (#2611) --- Resources/Maps/_NF/POI/trade.yml | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Resources/Maps/_NF/POI/trade.yml b/Resources/Maps/_NF/POI/trade.yml index 1fab43e1778..27b2a1d9789 100644 --- a/Resources/Maps/_NF/POI/trade.yml +++ b/Resources/Maps/_NF/POI/trade.yml @@ -9219,18 +9219,6 @@ entities: parent: 1 - proto: CargoPalletSell entities: - - uid: 225 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 61.5,22.5 - parent: 1 - - uid: 226 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 63.5,22.5 - parent: 1 - uid: 228 components: - type: Transform @@ -9461,6 +9449,16 @@ entities: - type: Transform pos: 81.5,-7.5 parent: 1 + - uid: 225 + components: + - type: Transform + pos: 61.5,22.5 + parent: 1 + - uid: 226 + components: + - type: Transform + pos: 63.5,22.5 + parent: 1 - uid: 341 components: - type: Transform From fa4b9fd9fdf85aa848fd8654d13bc5f414b5f2ef Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Thu, 26 Dec 2024 10:21:56 -0500 Subject: [PATCH 19/20] alt depot needs presets (#2613) --- Resources/Prototypes/_NF/PointsOfInterest/depots.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/_NF/PointsOfInterest/depots.yml b/Resources/Prototypes/_NF/PointsOfInterest/depots.yml index 0b8eae5b82c..d6c3105327d 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/depots.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/depots.yml @@ -31,6 +31,7 @@ name: Cargo Depot minimumDistance: 4500 maximumDistance: 6000 + spawnGamePreset: [ NFAdventure, NFPirate ] spawnGroup: CargoDepot gridPath: /Maps/_NF/POI/cargodepotalt.yml addComponents: From cb6514197459774e92bc983f1848038a3ef522f3 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Thu, 26 Dec 2024 15:22:25 +0000 Subject: [PATCH 20/20] Automatic Changelog (#2613) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 12d09316d55..99b83bb1457 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -6104,3 +6104,9 @@ Entries: message: Soil crates now must be "assembled" with a shovel. id: 5611 time: '2024-12-26T00:49:53.0000000+00:00' +- author: whatston3 + changes: + - type: Fix + message: Cargo Depots should be spawning normally now. + id: 5612 + time: '2024-12-26T15:21:56.0000000+00:00'