Airship + Unittest (#496)

* wings

* update cargo shuttle

* update goblin sound

* add new unit test

* Update CP14EntityTest.cs

* Update CP14RitualTest.cs

* add buy and sell hints

* paper reading

* hardwork

* clean task

* body forkfiltered

* Update crystal.yml

* more fork flitered

* Update basic.yml

* Update wild.yml

* Update CP14EntityTest.cs

* realise pusharing

* pusharing alchemical vials

* coin disappear works

* Fix
This commit is contained in:
Ed
2024-10-19 01:09:15 +03:00
committed by GitHub
parent f14177bf86
commit 78e94b1623
46 changed files with 817 additions and 321 deletions

View File

@@ -0,0 +1,37 @@
using System.Collections.Generic;
using Content.Shared._CP14.TravelingStoreShip.Prototype;
using Robust.Shared.GameObjects;
using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests._CP14;
#nullable enable
[TestFixture]
public sealed class CP14CargoTest
{
[Test]
public async Task CheckAllBuyPositionsUniqueCode()
{
await using var pair = await PoolManager.GetServerClient();
var server = pair.Server;
var compFactory = server.ResolveDependency<IComponentFactory>();
var protoManager = server.ResolveDependency<IPrototypeManager>();
await server.WaitAssertion(() =>
{
Assert.Multiple(() =>
{
HashSet<string> existedCodes = new();
foreach (var proto in protoManager.EnumeratePrototypes<CP14StoreBuyPositionPrototype>())
{
Assert.That(!existedCodes.Contains(proto.Code), $"Repeated purchasing code {proto.Code} of the {proto}");
existedCodes.Add(proto.Code);
}
});
});
await pair.CleanReturnAsync();
}
}

View File

@@ -0,0 +1,41 @@
using Robust.Shared.GameObjects;
using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests._CP14;
#nullable enable
[TestFixture]
public sealed class CP14EntityTest
{
[Test]
public async Task CheckAllCP14EntityHasForkFilteredCategory()
{
await using var pair = await PoolManager.GetServerClient();
var server = pair.Server;
var compFactory = server.ResolveDependency<IComponentFactory>();
var protoManager = server.ResolveDependency<IPrototypeManager>();
await server.WaitAssertion(() =>
{
Assert.Multiple(() =>
{
if (!protoManager.TryIndex<EntityCategoryPrototype>("ForkFiltered", out var indexedFilter))
return;
foreach (var proto in protoManager.EnumeratePrototypes<EntityPrototype>())
{
if (!proto.ID.StartsWith("CP14"))
continue;
if (proto.Abstract || proto.HideSpawnMenu)
continue;
Assert.That(proto.Categories.Contains(indexedFilter), $"CP14 fork proto: {proto} does not marked abstract, or have a HideSpawnMenu or ForkFiltered category");
}
});
});
await pair.CleanReturnAsync();
}
}

View File

@@ -42,7 +42,7 @@ public sealed class CP14RitualTest
foreach (var edge in phase.Edges)
{
Assert.That(edge.Triggers.Count > 0, $"{{proto}} is ritual node, but edge to {edge.Target} has no triggers and cannot be activated.");
Assert.That(edge.Triggers.Count > 0, $"{proto} is ritual node, but edge to {edge.Target} has no triggers and cannot be activated.");
}
}
});

View File

@@ -149,11 +149,6 @@ public sealed partial class CP14CurrencySystem : CP14SharedCurrencySystem
args.Verbs.Add(platinumVerb);
}
public HashSet<EntityUid> GenerateMoney(EntProtoId currencyType, int target, EntityCoordinates coordinates)
{
return GenerateMoney(currencyType, target, coordinates, out _);
}
public HashSet<EntityUid> GenerateMoney(EntProtoId currencyType, int target, EntityCoordinates coordinates, out int remainder)
{
remainder = target;
@@ -189,18 +184,18 @@ public sealed partial class CP14CurrencySystem : CP14SharedCurrencySystem
spawns.Add(ent);
remainder -= singleCurrency;
if (TryComp<StackComponent>(ent, out var stack))
if (TryComp<StackComponent>(ent, out var stack) && _proto.TryIndex<StackPrototype>(stack.StackTypeId, out var indexedStack))
{
AdjustStack(ent, stack, singleCurrency, ref remainder);
AdjustStack(ent, stack, indexedStack, singleCurrency, ref remainder);
}
return false;
}
private void AdjustStack(EntityUid ent, StackComponent stack, float singleCurrency, ref int remainder)
private void AdjustStack(EntityUid ent, StackComponent stack, StackPrototype stackProto, float singleCurrency, ref int remainder)
{
var singleStackCurrency = singleCurrency / stack.Count;
var stackLeftSpace = stack.MaxCountOverride - stack.Count;
var stackLeftSpace = stackProto.MaxCount - stack.Count;
if (stackLeftSpace is not null)
{

View File

@@ -25,22 +25,25 @@ public sealed partial class CP14CargoSystem
if (_timing.CurTime < ship.NextTravelTime || ship.NextTravelTime == TimeSpan.Zero)
continue;
if (Transform(ship.Shuttle).MapUid == Transform(ship.TradePostMap).MapUid)
if (ship.Shuttle is null || ship.TradePostMap is null)
continue;
if (Transform(ship.Shuttle.Value).MapUid == Transform(ship.TradePostMap.Value).MapUid)
{
// if landed on trade post
ship.NextTravelTime = _timing.CurTime + ship.StationWaitTime;
SendShuttleToStation((uid, ship));
SendShuttleToStation(ship.Shuttle.Value);
}
else
{
// if landed on station
ship.NextTravelTime = _timing.CurTime + ship.TradePostWaitTime;
SendShuttleToTradepost((uid, ship));
SendShuttleToTradepost(ship.Shuttle.Value, ship.TradePostMap.Value);
}
}
}
private void SendShuttleToStation(Entity<CP14StationTravelingStoreShipTargetComponent> station, float startupTime = 0f)
private void SendShuttleToStation(EntityUid shuttle, float startupTime = 0f)
{
var targetPoints = new List<EntityUid>();
var targetEnumerator = EntityQueryEnumerator<CP14TravelingStoreShipFTLTargetComponent, TransformComponent>(); //TODO - different method position location
@@ -54,16 +57,16 @@ public sealed partial class CP14CargoSystem
var target = _random.Pick(targetPoints);
var targetXform = Transform(target);
var shuttleComp = Comp<ShuttleComponent>(station.Comp.Shuttle);
var shuttleComp = Comp<ShuttleComponent>(shuttle);
_shuttles.FTLToCoordinates(station.Comp.Shuttle, shuttleComp, targetXform.Coordinates, targetXform.LocalRotation, hyperspaceTime: 5f, startupTime: startupTime);
_shuttles.FTLToCoordinates(shuttle, shuttleComp, targetXform.Coordinates, targetXform.LocalRotation, hyperspaceTime: 5f, startupTime: startupTime);
}
private void SendShuttleToTradepost(Entity<CP14StationTravelingStoreShipTargetComponent> station)
private void SendShuttleToTradepost(EntityUid shuttle, EntityUid tradePostMap)
{
var shuttleComp = Comp<ShuttleComponent>(station.Comp.Shuttle);
var shuttleComp = Comp<ShuttleComponent>(shuttle);
_shuttles.FTLToCoordinates(station.Comp.Shuttle, shuttleComp, new EntityCoordinates(station.Comp.TradePostMap, Vector2.Zero), Angle.Zero, hyperspaceTime: 5f);
_shuttles.FTLToCoordinates(shuttle, shuttleComp, new EntityCoordinates(tradePostMap, Vector2.Zero), Angle.Zero, hyperspaceTime: 5f);
}
private void OnFTLCompleted(Entity<CP14TravelingStoreShipComponent> ent, ref FTLCompletedEvent args)
@@ -71,16 +74,23 @@ public sealed partial class CP14CargoSystem
if (!TryComp<CP14StationTravelingStoreShipTargetComponent>(ent.Comp.Station, out var station))
return;
if (Transform(ent).MapUid == Transform(station.TradePostMap).MapUid) //Landed on tradepost
if (station.TradePostMap is not null && Transform(ent).MapUid == Transform(station.TradePostMap.Value).MapUid) //Landed on tradepost
{
station.OnStation = false;
SellingThings((ent.Comp.Station, station));
var b = station.Balance;
SellingThings((ent.Comp.Station, station)); // +balance
TopUpBalance((ent.Comp.Station, station)); //+balance
BuyToQueue((ent.Comp.Station, station)); //-balance +buyQueue
TrySpawnBuyedThings((ent.Comp.Station, station));
UpdateStorePositions((ent.Comp.Station, station));
}
else //Landed on station
{
station.OnStation = true;
CashOut((ent.Comp.Station, station));
}
UpdateAllStores();
}

View File

@@ -6,7 +6,7 @@ namespace Content.Server._CP14.TravelingStoreShip;
public sealed partial class CP14CargoSystem
{
public void InitializeStore()
public void InitializeUI()
{
SubscribeLocalEvent<CP14CargoStoreComponent, BeforeActivatableUIOpenEvent>(OnBeforeUIOpen);
}
@@ -27,15 +27,17 @@ public sealed partial class CP14CargoSystem
private void OnBeforeUIOpen(Entity<CP14CargoStoreComponent> ent, ref BeforeActivatableUIOpenEvent args)
{
//TODO: If you open a store on a mapping, and initStore() it, the entity will throw an error when you try to save the grid\map.
if (ent.Comp.Station is null)
TryInitStore(ent);
UpdateUIProducts(ent);
}
//TODO: redo
private void UpdateAllStores()
{
//TODO: redo
var query = EntityQueryEnumerator<CP14CargoStoreComponent>();
while (query.MoveNext(out var uid, out var store))
{
@@ -53,32 +55,30 @@ public sealed partial class CP14CargoSystem
foreach (var proto in ent.Comp.Station.Value.Comp.CurrentBuyPositions)
{
if (!_proto.TryIndex(proto.Key, out var indexedProto))
continue;
var name = Loc.GetString(indexedProto.Name);
var name = Loc.GetString(proto.Key.Name);
var desc = new StringBuilder();
desc.Append(Loc.GetString(indexedProto.Desc) + "\n");
foreach (var service in indexedProto.Services)
desc.Append(Loc.GetString(proto.Key.Desc) + "\n");
foreach (var service in proto.Key.Services)
{
desc.Append(service.GetDescription(_proto, EntityManager));
}
prodBuy.Add(new CP14StoreUiProductEntry(proto.Key.Id, indexedProto.Icon, name, desc.ToString(), proto.Value));
desc.Append("\n" + Loc.GetString("cp14-store-buy-hint", ("name", Loc.GetString(proto.Key.Name)), ("code", "#" + proto.Key.Code)));
prodBuy.Add(new CP14StoreUiProductEntry(proto.Key.ID, proto.Key.Icon, name, desc.ToString(), proto.Value));
}
foreach (var proto in ent.Comp.Station.Value.Comp.CurrentSellPositions)
{
if (!_proto.TryIndex(proto.Key, out var indexedProto))
continue;
var name = Loc.GetString(indexedProto.Name);
var name = Loc.GetString(proto.Key.Name);
var desc = new StringBuilder();
desc.Append(Loc.GetString(indexedProto.Desc) + "\n");
desc.Append(indexedProto.Service.GetDescription(_proto, EntityManager));
desc.Append(Loc.GetString(proto.Key.Desc) + "\n");
desc.Append(proto.Key.Service.GetDescription(_proto, EntityManager) + "\n");
desc.Append("\n" + Loc.GetString("cp14-store-sell-hint", ("name", Loc.GetString(proto.Key.Name))));
prodSell.Add(new CP14StoreUiProductEntry(proto.Key.Id, indexedProto.Icon, name, desc.ToString(), proto.Value));
prodSell.Add(new CP14StoreUiProductEntry(proto.Key.ID, proto.Key.Icon, name, desc.ToString(), proto.Value));
}
var stationComp = ent.Comp.Station.Value.Comp;

View File

@@ -5,6 +5,10 @@ using Content.Server.Station.Systems;
using Content.Shared._CP14.Currency;
using Content.Shared._CP14.TravelingStoreShip;
using Content.Shared._CP14.TravelingStoreShip.Prototype;
using Content.Shared.Maps;
using Content.Shared.Paper;
using Content.Shared.Physics;
using Content.Shared.Storage;
using Content.Shared.Storage.EntitySystems;
using Robust.Server.GameObjects;
using Robust.Shared.Map;
@@ -28,6 +32,7 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
[Dependency] private readonly EntityLookupSystem _lookup = default!;
[Dependency] private readonly CP14CurrencySystem _currency = default!;
[Dependency] private readonly SharedStorageSystem _storage = default!;
[Dependency] private readonly TurfSystem _turf = default!;
private EntityQuery<TransformComponent> _xformQuery;
@@ -38,7 +43,8 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
public override void Initialize()
{
base.Initialize();
InitializeStore();
InitializeUI();
InitializeShuttle();
_xformQuery = GetEntityQuery<TransformComponent>();
@@ -76,7 +82,7 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
var shuttle = shuttleUids[0];
station.Comp.Shuttle = shuttle;
station.Comp.TradePostMap = _mapManager.GetMapEntityId(tradepostMap);
var travelingStoreShipComp = EnsureComp<CP14TravelingStoreShipComponent>(station.Comp.Shuttle);
var travelingStoreShipComp = EnsureComp<CP14TravelingStoreShipComponent>(station.Comp.Shuttle.Value);
travelingStoreShipComp.Station = station;
station.Comp.NextTravelTime = _timing.CurTime + TimeSpan.FromSeconds(10f);
@@ -104,6 +110,9 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
}
}
/// <summary>
/// Sell all the items we can, and replenish the internal balance
/// </summary>
private void SellingThings(Entity<CP14StationTravelingStoreShipTargetComponent> station)
{
var shuttle = station.Comp.Shuttle;
@@ -119,7 +128,7 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
var sentEntities = new HashSet<EntityUid>();
_lookup.GetEntitiesInRange(uid, 1, sentEntities, LookupFlags.Dynamic | LookupFlags.Sundries);
_lookup.GetEntitiesInRange(uid, 0.5f, sentEntities, LookupFlags.Dynamic | LookupFlags.Sundries);
foreach (var ent in sentEntities)
{
@@ -130,56 +139,154 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
}
}
var cash = 0;
foreach (var sellPos in station.Comp.CurrentSellPositions)
{
if (!_proto.TryIndex(sellPos.Key, out var indexedPos))
continue;
while (indexedPos.Service.TrySell(EntityManager, toSell))
while (sellPos.Key.Service.TrySell(EntityManager, toSell))
{
cash += sellPos.Value;
station.Comp.Balance += sellPos.Value;
}
}
}
/// <summary>
/// Take all the money from the tradebox, and credit it to the internal balance
/// </summary>
private void TopUpBalance(Entity<CP14StationTravelingStoreShipTargetComponent> station)
{
var tradebox = GetTradeBox(station);
if (tradebox is null)
return;
if (!TryComp<StorageComponent>(tradebox, out var tradeStorage))
return;
//Get all currency in tradebox
int cash = 0;
foreach (var stored in tradeStorage.Container.ContainedEntities)
{
var price = _currency.GetTotalCurrency(stored);
if (price > 0)
{
cash += price;
QueueDel(stored);
}
}
var moneyBox = GetMoneyBox(station);
station.Comp.Balance += cash;
}
private void BuyToQueue(Entity<CP14StationTravelingStoreShipTargetComponent> station)
{
var tradebox = GetTradeBox(station);
if (tradebox is null)
return;
if (!TryComp<StorageComponent>(tradebox, out var tradeStorage))
return;
//Reading all papers in tradebox
List<KeyValuePair<CP14StoreBuyPositionPrototype, int>> requests = new();
foreach (var stored in tradeStorage.Container.ContainedEntities)
{
if (!TryComp<PaperComponent>(stored, out var paper))
continue;
var splittedText = paper.Content.Split("#");
foreach (var fragment in splittedText)
{
foreach (var buyPosition in station.Comp.CurrentBuyPositions)
{
if (fragment.StartsWith(buyPosition.Key.Code))
requests.Add(buyPosition);
}
}
QueueDel(stored);
}
//Trying spend tradebox money to buy requested things
foreach (var request in requests)
{
if (station.Comp.Balance < request.Value)
continue;
station.Comp.Balance -= request.Value;
station.Comp.BuyedQueue.Enqueue(request);
}
}
//Dequeue buyed items, and spawn they on shuttle
private void TrySpawnBuyedThings(Entity<CP14StationTravelingStoreShipTargetComponent> station)
{
var shuttle = station.Comp.Shuttle;
var query = EntityQueryEnumerator<CP14BuyingPalettComponent, TransformComponent>();
while (query.MoveNext(out var uid, out _, out var palletXform))
{
if (station.Comp.BuyedQueue.Count <= 0)
break;
if (palletXform.ParentUid != shuttle || !palletXform.Anchored)
continue;
var tileRef = palletXform.Coordinates.GetTileRef();
if (tileRef is null)
continue;
if (_turf.IsTileBlocked(tileRef.Value, CollisionGroup.ItemMask))
continue;
var buyedThing = station.Comp.BuyedQueue.Dequeue();
Spawn(buyedThing.Key.ID, palletXform.Coordinates);
}
}
/// <summary>
/// Transform all the accumulated balance into physical money, which we will give to the players.
/// </summary>
private void CashOut(Entity<CP14StationTravelingStoreShipTargetComponent> station)
{
var moneyBox = GetTradeBox(station);
if (moneyBox is not null)
{
var coord = Transform(moneyBox.Value).Coordinates;
if (cash > 0)
if (station.Comp.Balance > 0)
{
var coins = _currency.GenerateMoney(CP14SharedCurrencySystem.PP.Key, cash, coord, out var remainder);
cash = remainder;
var coins = _currency.GenerateMoney(CP14SharedCurrencySystem.PP.Key, station.Comp.Balance, coord, out var remainder);
station.Comp.Balance = remainder;
foreach (var coin in coins)
{
_storage.Insert(moneyBox.Value, coin, out _);
}
}
if (cash > 0)
if (station.Comp.Balance > 0)
{
var coins = _currency.GenerateMoney(CP14SharedCurrencySystem.GP.Key, cash, coord, out var remainder);
cash = remainder;
var coins = _currency.GenerateMoney(CP14SharedCurrencySystem.GP.Key, station.Comp.Balance, coord, out var remainder);
station.Comp.Balance = remainder;
foreach (var coin in coins)
{
_storage.Insert(moneyBox.Value, coin, out _);
}
}
if (cash > 0)
if (station.Comp.Balance > 0)
{
var coins = _currency.GenerateMoney(CP14SharedCurrencySystem.SP.Key, cash, coord, out var remainder);
cash = remainder;
var coins = _currency.GenerateMoney(CP14SharedCurrencySystem.SP.Key, station.Comp.Balance, coord, out var remainder);
station.Comp.Balance = remainder;
foreach (var coin in coins)
{
_storage.Insert(moneyBox.Value, coin, out _);
}
}
if (cash > 0)
if (station.Comp.Balance > 0)
{
var coins = _currency.GenerateMoney(CP14SharedCurrencySystem.CP.Key, cash, coord);
var coins = _currency.GenerateMoney(CP14SharedCurrencySystem.CP.Key, station.Comp.Balance, coord, out var remainder);
station.Comp.Balance = remainder;
foreach (var coin in coins)
{
_storage.Insert(moneyBox.Value, coin, out _);
@@ -188,7 +295,7 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
}
}
private EntityUid? GetMoneyBox(Entity<CP14StationTravelingStoreShipTargetComponent> station)
private EntityUid? GetTradeBox(Entity<CP14StationTravelingStoreShipTargetComponent> station)
{
var query = EntityQueryEnumerator<CP14CargoMoneyBoxComponent, TransformComponent>();

View File

@@ -37,11 +37,16 @@ public partial class CP14SharedCurrencySystem : EntitySystem
return sb.ToString();
}
public int GetTotalCurrency(EntityUid uid, CP14CurrencyComponent? currency = null)
public int GetTotalCurrency(EntityUid uid)
{
if (!Resolve(uid, ref currency))
if (!TryComp<CP14CurrencyComponent>(uid, out var currency))
return 0;
return GetTotalCurrency(uid, currency);
}
public int GetTotalCurrency(EntityUid uid, CP14CurrencyComponent currency)
{
var total = currency.Currency;
if (TryComp<StackComponent>(uid, out var stack))

View File

@@ -12,35 +12,44 @@ namespace Content.Shared._CP14.TravelingStoreShip;
public sealed partial class CP14StationTravelingStoreShipTargetComponent : Component
{
[DataField]
public EntityUid Shuttle;
public EntityUid? Shuttle;
[DataField]
public EntityUid TradePostMap;
public EntityUid? TradePostMap;
[DataField]
public bool OnStation;
[DataField]
public ResPath ShuttlePath = new("/Maps/_CP14/Ships/balloon.yml");
public ResPath ShuttlePath = new("/Maps/_CP14/Ships/cargo_shuttle.yml");
[DataField]
public TimeSpan NextTravelTime = TimeSpan.Zero;
[DataField]
public TimeSpan StationWaitTime = TimeSpan.FromMinutes(6);
public TimeSpan StationWaitTime = TimeSpan.FromMinutes(1);
[DataField]
public TimeSpan TradePostWaitTime = TimeSpan.FromMinutes(4);
public TimeSpan TradePostWaitTime = TimeSpan.FromMinutes(1);
[DataField]
public Dictionary<ProtoId<CP14StoreBuyPositionPrototype>, int> CurrentBuyPositions = new(); //Proto, price
public Dictionary<CP14StoreBuyPositionPrototype, int> CurrentBuyPositions = new(); //Proto, price
[DataField]
public MinMax SpecialBuyPositionCount = new(1, 2);
[DataField]
public Dictionary<ProtoId<CP14StoreSellPositionPrototype>, int> CurrentSellPositions = new(); //Proto, price
public Dictionary<CP14StoreSellPositionPrototype, int> CurrentSellPositions = new(); //Proto, price
[DataField]
public MinMax SpecialSellPositionCount = new(1, 2);
[DataField]
public int Balance = 0;
/// <summary>
/// a queue of purchased items. The oldest purchases are taken out one by one to be unloaded onto the ship
/// </summary>
[DataField]
public Queue<KeyValuePair<CP14StoreBuyPositionPrototype, int>> BuyedQueue = new();
}

View File

@@ -26,6 +26,12 @@ public sealed partial class CP14StoreBuyPositionPrototype : IPrototype
[DataField(required: true)]
public LocId Name = string.Empty;
/// <summary>
/// a unique code that can be used to purchase items.
/// </summary>
[DataField(required: true)]
public string Code = string.Empty;
[DataField]
public LocId Desc = string.Empty;

View File

@@ -1,2 +1,7 @@
cp14-store-buy-hint = If you want to buy {$name}, leave your money and order in the trade box: Any paper that says {$code} on it will do.
cp14-store-buy-alchemy-normalizer-name = Solution normalizer
cp14-store-buy-alchemy-normalizer-desc = Are your alchemists making poor quality potions? Fix it with a modern technological device made by Dwarf! “Alchemical Normalizer” - will remove any residue from your potions!
cp14-store-buy-alchemy-normalizer-desc = Are your alchemists making poor quality potions? Fix it with a modern technological device made by Dwarf! “Alchemical Normalizer” - will remove any residue from your potions!
cp14-store-buy-alchemy-vials-name = Alchemical vials
cp14-store-buy-alchemy-vials-desc = Now the problem of shortage of potion vessels is no longer a problem! After all, for a rather modest price you can order batches of shiny vials directly from the glassblowing factory! Random alchemical devices as a gift.

View File

@@ -1,3 +1,5 @@
cp14-store-sell-hint = To sell {$name}, load the desired goods onto the selling pallets. Our people in town will sort it out, pick up the goods and leave the money in the trade box on the ship.
cp14-store-sell-goldbar-name = 10 gold bars
cp14-store-sell-goldbar-desc = The mining and processing of gold ore is heavily sponsored by the empire, which uses gold as currency and material for jewelry.

View File

@@ -1,2 +1,7 @@
cp14-store-buy-hint = Если вы хотите купить {$name}, оставьте деньги и ваш заказ в торговом ящике: Подойдет любая бумага, на которой будет написано {$code}
cp14-store-buy-alchemy-normalizer-name = Нормализатор растворов
cp14-store-buy-alchemy-normalizer-desc = Ваши алхимики делают некачественные зелья? Исправьте это при помощи современного технологического устройства дворфского производства! "Алхимический нормализатор" - удалит из ваших зелий любой осадок!
cp14-store-buy-alchemy-normalizer-desc = Ваши алхимики делают некачественные зелья? Исправьте это при помощи современного технологического устройства дворфского производства! "Алхимический нормализатор" - удалит из ваших зелий любой осадок!
cp14-store-buy-alchemy-vials-name = Алхимические пузырьки
cp14-store-buy-alchemy-vials-desc = Теперь проблема дефицита емкостей для зелий больше не проблема! Ведь по довольно скромной цене вы можете заказывать партии блестящих склянок прямо с стеклодульного завода! Случайные алхимические приборы в подарок.

View File

@@ -1,3 +1,5 @@
cp14-store-sell-hint = Чтобы продать {$name}, погрузите необходимый товар на продающие поддоны. Наши люди в городе разберутся что к чему, заберут товар и оставят деньги в торговом ящике на корабле.
cp14-store-sell-goldbar-name = 10 золотых слитков
cp14-store-sell-goldbar-desc = Добыча и обработка золотой руды активно спонсируется империей, использующей золото как валюту и материал для ювелирных украшений.

View File

@@ -3,7 +3,7 @@ meta:
postmapinit: false
tilemap:
0: Space
49: CP14FloorStonebricksSmallCarved1
35: CP14FloorOakWoodPlanksCruciform
entities:
- proto: ""
entities:
@@ -12,25 +12,25 @@ entities:
- type: MetaData
name: grid
- type: Transform
pos: -0.73058385,-0.60119945
pos: -0.5393677,-0.48875555
parent: invalid
- type: MapGrid
chunks:
0,0:
ind: 0,0
tiles: MQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
tiles: IwAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
version: 6
-1,0:
ind: -1,0
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
version: 6
-1,-1:
ind: -1,-1
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAA
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAA
version: 6
0,-1:
ind: 0,-1
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
version: 6
- type: Broadphase
- type: Physics
@@ -60,289 +60,416 @@ entities:
- type: RadiationGridResistance
- proto: C14IronCabinetCargo
entities:
- uid: 50
components:
- type: Transform
pos: 0.5,-1.5
parent: 1
- proto: CP14WallmountLamp
entities:
- uid: 51
- uid: 61
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -1.5,-3.5
pos: 1.5,0.5
parent: 1
- type: Fixtures
fixtures: {}
- uid: 52
- proto: CP14BrassChest
entities:
- uid: 59
components:
- type: Transform
pos: -0.5,-3.5
parent: 1
- proto: CP14ChairWooden
entities:
- uid: 56
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,-3.5
pos: 1.6128012,-3.351526
parent: 1
- type: Fixtures
fixtures: {}
- uid: 53
- uid: 57
components:
- type: Transform
pos: -1.5,4.5
rot: 1.5707963267948966 rad
pos: 0.67951775,-2.4741838
parent: 1
- type: Fixtures
fixtures: {}
- uid: 54
- uid: 58
components:
- type: Transform
pos: 2.5,4.5
rot: 1.5707963267948966 rad
pos: 0.66827327,-1.5855919
parent: 1
- type: Fixtures
fixtures: {}
- proto: CP14WallStonebrick
- proto: CP14CurtainsRedOpened
entities:
- uid: 2
components:
- type: Transform
pos: -0.5,-4.5
parent: 1
- uid: 3
components:
- type: Transform
pos: -1.5,-4.5
parent: 1
- uid: 4
components:
- type: Transform
pos: -2.5,-4.5
parent: 1
- uid: 5
components:
- type: Transform
pos: -2.5,-3.5
parent: 1
- uid: 6
components:
- type: Transform
pos: -2.5,-1.5
parent: 1
- uid: 7
components:
- type: Transform
pos: -2.5,-0.5
parent: 1
- uid: 8
components:
- type: Transform
pos: -2.5,0.5
parent: 1
- uid: 11
components:
- type: Transform
pos: -2.5,-2.5
parent: 1
- uid: 13
components:
- type: Transform
pos: -2.5,4.5
parent: 1
- uid: 14
components:
- type: Transform
pos: -2.5,5.5
parent: 1
- uid: 15
components:
- type: Transform
pos: -1.5,5.5
parent: 1
- uid: 18
components:
- type: Transform
pos: 2.5,5.5
parent: 1
- uid: 19
components:
- type: Transform
pos: 3.5,5.5
parent: 1
- uid: 21
components:
- type: Transform
pos: 3.5,4.5
parent: 1
- uid: 25
components:
- type: Transform
pos: 3.5,0.5
parent: 1
- uid: 26
components:
- type: Transform
pos: 3.5,-0.5
parent: 1
- uid: 27
components:
- type: Transform
pos: 3.5,-2.5
parent: 1
- uid: 28
components:
- type: Transform
pos: 3.5,-1.5
parent: 1
- uid: 29
components:
- type: Transform
pos: 3.5,-3.5
parent: 1
- uid: 30
components:
- type: Transform
pos: 3.5,-4.5
parent: 1
- uid: 31
components:
- type: Transform
pos: 2.5,-4.5
parent: 1
- uid: 32
components:
- type: Transform
pos: 1.5,-4.5
parent: 1
- uid: 49
components:
- type: Transform
pos: 0.5,-0.5
parent: 1
- proto: CP14WindowStoneBrick
entities:
- uid: 9
components:
- type: Transform
pos: -2.5,1.5
parent: 1
- uid: 10
components:
- type: Transform
pos: -2.5,2.5
parent: 1
- uid: 12
components:
- type: Transform
pos: -2.5,3.5
parent: 1
- uid: 16
components:
- type: Transform
pos: 0.5,5.5
parent: 1
- uid: 17
components:
- type: Transform
pos: 1.5,5.5
parent: 1
- uid: 20
components:
- type: Transform
pos: -0.5,5.5
parent: 1
- uid: 22
components:
- type: Transform
pos: 3.5,3.5
rot: -1.5707963267948966 rad
pos: 1.5,-1.5
parent: 1
- uid: 23
components:
- type: Transform
pos: 3.5,2.5
rot: -1.5707963267948966 rad
pos: 1.5,-2.5
parent: 1
- uid: 24
components:
- type: Transform
pos: 3.5,1.5
rot: 1.5707963267948966 rad
pos: -0.5,-1.5
parent: 1
- proto: CP14WoodenPalletBuy
- uid: 25
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -0.5,-2.5
parent: 1
- uid: 26
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,-3.5
parent: 1
- proto: CP14FenceWoodSmallCorner
entities:
- uid: 28
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -1.5,4.5
parent: 1
- uid: 29
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,6.5
parent: 1
- uid: 30
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 1.5,6.5
parent: 1
- uid: 31
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 2.5,4.5
parent: 1
- proto: CP14FenceWoodSmallStraight
entities:
- uid: 32
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,3.5
parent: 1
- uid: 33
components:
- type: Transform
pos: 1.5,4.5
rot: -1.5707963267948966 rad
pos: -1.5,0.5
parent: 1
- uid: 34
components:
- type: Transform
pos: 1.5,3.5
rot: 1.5707963267948966 rad
pos: 2.5,0.5
parent: 1
- uid: 35
components:
- type: Transform
pos: 1.5,2.5
rot: 1.5707963267948966 rad
pos: 2.5,3.5
parent: 1
- uid: 36
components:
- type: Transform
pos: 2.5,4.5
rot: 1.5707963267948966 rad
pos: 1.5,5.5
parent: 1
- uid: 37
components:
- type: Transform
pos: 2.5,3.5
rot: -1.5707963267948966 rad
pos: -0.5,5.5
parent: 1
- uid: 38
components:
- type: Transform
pos: 2.5,2.5
rot: 3.141592653589793 rad
pos: 0.5,6.5
parent: 1
- uid: 39
components:
- type: Transform
pos: 1.5,1.5
parent: 1
- uid: 40
components:
- type: Transform
pos: 2.5,1.5
parent: 1
- proto: CP14WoodenPalletSell
- proto: CP14GreenBottle
entities:
- uid: 41
- uid: 46
components:
- type: Transform
pos: -0.5,4.5
pos: 1.6018345,-1.3505682
parent: 1
- uid: 42
- uid: 60
components:
- type: Transform
pos: -0.5,2.5
pos: 1.344657,-1.2195666
parent: 1
- uid: 43
- proto: CP14PaperFolderRed
entities:
- uid: 63
components:
- type: Transform
pos: -0.5,1.5
pos: -0.34691465,6.6029224
parent: 1
- uid: 64
components:
- type: Transform
pos: -0.50438666,6.4117675
parent: 1
- proto: CP14PenFeather
entities:
- uid: 65
components:
- type: Transform
pos: -0.34691465,6.0294585
parent: 1
- proto: CP14ShuttleWingBigL
entities:
- uid: 9
components:
- type: Transform
pos: -1.5,-0.5
parent: 1
- proto: CP14ShuttleWingBigR
entities:
- uid: 6
components:
- type: Transform
pos: 2.5,-0.5
parent: 1
- proto: CP14ShuttleWingSmallL
entities:
- uid: 4
components:
- type: Transform
pos: -1.5,-3.5
parent: 1
- uid: 5
components:
- type: Transform
pos: -0.5,-4.5
parent: 1
- proto: CP14ShuttleWingSmallR
entities:
- uid: 7
components:
- type: Transform
pos: 2.5,-3.5
parent: 1
- uid: 8
components:
- type: Transform
pos: 1.5,-4.5
parent: 1
- proto: CP14TableWooden
entities:
- uid: 44
components:
- type: Transform
pos: -1.5,4.5
rot: 3.141592653589793 rad
pos: 1.5,-1.5
parent: 1
- uid: 55
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,-2.5
parent: 1
- proto: CP14TableWoodenCounter
entities:
- uid: 39
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,7.5
parent: 1
- uid: 45
components:
- type: Transform
pos: -1.5,3.5
rot: 3.141592653589793 rad
pos: 2.5,0.5
parent: 1
- uid: 46
- uid: 51
components:
- type: Transform
pos: -1.5,2.5
rot: 3.141592653589793 rad
pos: -0.5,5.5
parent: 1
- uid: 52
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,6.5
parent: 1
- uid: 53
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,5.5
parent: 1
- uid: 54
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,6.5
parent: 1
- proto: CP14WallmountLamp
entities:
- uid: 62
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,0.5
parent: 1
- type: Fixtures
fixtures: {}
- uid: 67
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 1.5,-3.5
parent: 1
- type: Fixtures
fixtures: {}
- proto: CP14WallWooden
entities:
- uid: 2
components:
- type: Transform
pos: -1.5,-4.5
parent: 1
- uid: 3
components:
- type: Transform
pos: -0.5,-4.5
parent: 1
- uid: 11
components:
- type: Transform
pos: 1.5,-4.5
parent: 1
- uid: 12
components:
- type: Transform
pos: 2.5,-4.5
parent: 1
- uid: 13
components:
- type: Transform
pos: 2.5,-3.5
parent: 1
- uid: 14
components:
- type: Transform
pos: -1.5,-3.5
parent: 1
- uid: 17
components:
- type: Transform
pos: -1.5,-0.5
parent: 1
- uid: 19
components:
- type: Transform
pos: 2.5,-0.5
parent: 1
- uid: 27
components:
- type: Transform
pos: 0.5,-0.5
parent: 1
- uid: 66
components:
- type: Transform
pos: 1.5,-0.5
parent: 1
- proto: CP14WindowWooden
entities:
- uid: 10
components:
- type: Transform
pos: 0.5,-4.5
parent: 1
- uid: 15
components:
- type: Transform
pos: -1.5,-2.5
parent: 1
- uid: 16
components:
- type: Transform
pos: -1.5,-1.5
parent: 1
- uid: 20
components:
- type: Transform
pos: 2.5,-1.5
parent: 1
- uid: 21
components:
- type: Transform
pos: 2.5,-2.5
parent: 1
- proto: CP14WoodenDoor
entities:
- uid: 18
components:
- type: Transform
pos: -0.5,-0.5
parent: 1
- proto: CP14WoodenPalletBuy
entities:
- uid: 47
components:
- type: Transform
pos: -1.5,1.5
rot: 3.141592653589793 rad
pos: 2.5,3.5
parent: 1
- uid: 48
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,4.5
parent: 1
- uid: 49
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,3.5
parent: 1
- uid: 50
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,4.5
parent: 1
- proto: CP14WoodenPalletSell
entities:
- uid: 40
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,4.5
parent: 1
- uid: 41
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,3.5
parent: 1
- uid: 42
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -1.5,4.5
parent: 1
- uid: 43
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -1.5,3.5
parent: 1
...

View File

@@ -0,0 +1,24 @@
- type: entity
parent: CP14BrassChest
id: CP14BrassChestFilledAlchemy
suffix: Alchemical vials
components:
- type: StorageFill
contents:
- id: CP14VialTiny
amount: 9
- id: CP14VialSmall
amount: 8
#Gift
- id: CP14Dropper
prob: 0.2
- id: CP14Mortar
prob: 0.2
- id: CP14Pestle
prob: 0.2
- id: CP14VialSmall
prob: 0.2
- id: CP14VialTiny
prob: 0.2
- id: ShardGlass #Lol. Something broken
prob: 0.2

View File

@@ -61,6 +61,7 @@
- ItemHeftyBase
name: artificial flame
description: A magically created artificial flame burning directly into the air. Not a bad light source, or a weapon if you throw it in someone's face.
categories: [ ForkFiltered ]
components:
- type: Item
size: Ginormous

View File

@@ -56,6 +56,7 @@
- type: entity
id: CP14SpawnEffectFlashLight
categories: [ HideSpawnMenu ]
components:
- type: Sprite
sprite: /Textures/Objects/Fun/goldbikehorn.rsi

View File

@@ -60,6 +60,7 @@
parent: IceCrust
name: ice crust
description: It's cold and slippery.
categories: [ ForkFiltered ]
components:
- type: Slippery
paralyzeTime: 1

View File

@@ -59,6 +59,7 @@
name: Sphere of light
parent: BaseItem
description: A lump of bright light in the shape of a sphere.
categories: [ ForkFiltered ]
components:
- type: TimedDespawn
lifetime: 300 # 5 min

View File

@@ -2,6 +2,7 @@
- type: entity
id: CP14TorsoHuman
parent: TorsoHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Human/parts.rsi
@@ -10,6 +11,7 @@
- type: entity
id: CP14HeadHuman
parent: HeadHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Human/parts.rsi
@@ -18,6 +20,7 @@
- type: entity
id: CP14LeftArmHuman
parent: LeftArmHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Human/parts.rsi
@@ -25,6 +28,7 @@
- type: entity
id: CP14RightArmHuman
parent: RightArmHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Human/parts.rsi
@@ -32,6 +36,7 @@
- type: entity
id: CP14LeftHandHuman
parent: LeftHandHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Human/parts.rsi
@@ -39,6 +44,7 @@
- type: entity
id: CP14RightHandHuman
parent: RightHandHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Human/parts.rsi
@@ -46,6 +52,7 @@
- type: entity
id: CP14LeftLegHuman
parent: LeftLegHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Human/parts.rsi
@@ -53,6 +60,7 @@
- type: entity
id: CP14RightLegHuman
parent: RightLegHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Human/parts.rsi
@@ -60,6 +68,7 @@
- type: entity
id: CP14LeftFootHuman
parent: LeftFootHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Human/parts.rsi
@@ -67,6 +76,7 @@
- type: entity
id: CP14RightFootHuman
parent: RightFootHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Human/parts.rsi

View File

@@ -1,6 +1,7 @@
- type: entity
id: CP14TorsoZombie
parent: CP14TorsoHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Zombie/parts.rsi
@@ -9,6 +10,7 @@
- type: entity
id: CP14HeadZombie
parent: CP14HeadHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Zombie/parts.rsi
@@ -17,6 +19,7 @@
- type: entity
id: CP14LeftArmZombie
parent: CP14LeftArmHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Zombie/parts.rsi
@@ -24,6 +27,7 @@
- type: entity
id: CP14RightArmZombie
parent: CP14RightArmHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Zombie/parts.rsi
@@ -31,6 +35,7 @@
- type: entity
id: CP14LeftHandZombie
parent: CP14LeftHandHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Zombie/parts.rsi
@@ -38,14 +43,15 @@
- type: entity
id: CP14RightHandZombie
parent: CP14RightHandHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Zombie/parts.rsi
- type: entity
id: CP14LeftLegZombie
name: "left zombie leg"
parent: CP14LeftLegHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Zombie/parts.rsi
@@ -63,8 +69,8 @@
- type: entity
id: CP14RightLegZombie
name: "right zombie leg"
parent: CP14RightLegHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Zombie/parts.rsi
@@ -83,6 +89,7 @@
- type: entity
id: CP14LeftFootZombie
parent: CP14LeftFootHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Zombie/parts.rsi
@@ -90,6 +97,7 @@
- type: entity
id: CP14RightFootZombie
parent: CP14RightFootHuman
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Mobs/Species/Zombie/parts.rsi

View File

@@ -2,6 +2,7 @@
parent: BaseFoam
id: CP14Mist
name: mist
categories: [ HideSpawnMenu ]
components:
- type: Sprite
sprite: _CP14/Effects/mist.rsi
@@ -14,20 +15,4 @@
- type: SolutionContainerManager
solutions:
solutionArea:
maxVol: 100
- type: entity
parent: CP14Mist
id: CP14MistVitalExtract
components:
- type: Sprite
sprite: _CP14/Effects/mist.rsi
layers:
- state: chemmist
color: "#db2a2a"
- type: SolutionContainerManager
solutions:
solutionArea:
reagents:
- ReagentId: CP14VitalExtract
Quantity: 10
maxVol: 100

View File

@@ -17,6 +17,7 @@
parent: CP14BaseRitualPhase
id: CP14RitualEnd
name: end of ritual
categories: [ HideSpawnMenu ]
components:
- type: CP14MagicRitualPhase
deadEnd: true

View File

@@ -6,6 +6,7 @@
components:
- type: Sprite
snapCardinals: true
drawdepth: FloorTiles
- type: Transform
anchored: true
- type: Physics

View File

@@ -176,6 +176,7 @@
id: CP14QuartzCrystal
name: quartz
description: Quartz is an essential mineral capable of interacting with magical energy. It is highly sought after by alchemists for extracting beneficial properties from liquids
categories: [ HideSpawnMenu ]
components:
- type: Sprite
drawdepth: Mobs

View File

@@ -48,7 +48,6 @@
- FullTileMask
layer:
- Opaque
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Wood
@@ -98,6 +97,7 @@
id: CP14RandomBushOffsetSpawner
name: random bush offset spawner
parent: MarkerBase
categories: [ ForkFiltered ]
components:
- type: Sprite
layers:

View File

@@ -98,7 +98,7 @@
- type: entity
parent: C14IronCabinet
id: C14IronCabinetCargo
name: money box
name: trade box
description: An armored vault for storing money for trade with the city. City workers will unload their earnings here, or take them from here when you want to buy something.
components:
- type: CP14CargoMoneyBox

View File

@@ -0,0 +1,76 @@
- type: entity
id: CP14TravelingStoreshipAnchor
name: traveling storeship anchor
categories: [ ForkFiltered ]
placement:
mode: SnapgridCenter
description: the point of adhesion of a traveling storeship to the surface. Keep your eyes to the sky so you don't get crushed!
components:
- type: Clickable
- type: Sprite
sprite: _CP14/Structures/Shuttle/traveling_storeship_anchor.rsi
state: base
drawdepth: FloorTiles
- type: Icon
sprite: _CP14/Structures/Shuttle/traveling_storeship_anchor.rsi
state: base
- type: Transform
anchored: true
- type: CP14TravelingStoreShipFTLTarget
- type: FTLSmashImmune
- type: entity
id: CP14ShuttleWingBase
abstract: true
categories: [ ForkFiltered ]
name: airship wing
description: Giant webbed wings, capable, along with magic, of holding the heaviest objects in the air.
placement:
mode: SnapgridCenter
components:
- type: Sprite
drawdepth: FloorTiles
- type: Clickable
- type: Transform
anchored: true
- type: entity
parent: CP14ShuttleWingBase
id: CP14ShuttleWingSmallR
suffix: Right, Small
components:
- type: Sprite
offset: 1, -0.75
sprite: _CP14/Structures/Shuttle/wing_small.rsi
state: right
- type: entity
parent: CP14ShuttleWingBase
id: CP14ShuttleWingSmallL
suffix: Left, Small
components:
- type: Sprite
offset: -1, -0.75
sprite: _CP14/Structures/Shuttle/wing_small.rsi
state: left
- type: entity
parent: CP14ShuttleWingBase
id: CP14ShuttleWingBigL
suffix: Left, Big
components:
- type: Sprite
offset: -1.75, -1.5
sprite: _CP14/Structures/Shuttle/wing_big.rsi
state: left
- type: entity
parent: CP14ShuttleWingBase
id: CP14ShuttleWingBigR
suffix: Right, Big
components:
- type: Sprite
offset: 1.75, -1.5
sprite: _CP14/Structures/Shuttle/wing_big.rsi
state: right

View File

@@ -50,7 +50,7 @@
key: walls
mode: NoSprite
- type: Sprite
drawdepth: FloorTiles
drawdepth: BelowFloor
sprite: _CP14/Structures/Specific/Farming/seedbed.rsi
layers:
- state: seedbed_default

View File

@@ -7,6 +7,7 @@
abstract: true
name: sparkling quartz
description: bioluminescent quartz crystals that can take on any color - a very handy light source in a deep caves. Unfortunately, the luminous properties are very hard to preserve.
categories: [ ForkFiltered ]
components:
- type: Sprite
drawdepth: Mobs
@@ -124,6 +125,7 @@
parent: BaseRock
name: sparkling quartz
description: bioluminescent quartz crystals that can take on any color - a very handy light source in a deep caves. Unfortunately, the luminous properties are very hard to preserve.
categories: [ ForkFiltered ]
components:
- type: Sprite
drawdepth: Mobs

View File

@@ -1,20 +0,0 @@
- type: entity
id: CP14TravelingStoreshipAnchor
name: traveling storeship anchor
categories: [ ForkFiltered ]
placement:
mode: SnapgridCenter
description: the point of adhesion of a traveling storeship to the surface. Keep your eyes to the sky so you don't get crushed!
components:
- type: Clickable
- type: Sprite
sprite: _CP14/Structures/traveling_storeship_anchor.rsi
state: base
drawdepth: FloorTiles
- type: Icon
sprite: _CP14/Structures/traveling_storeship_anchor.rsi
state: base
- type: Transform
anchored: true
- type: CP14TravelingStoreShipFTLTarget
- type: FTLSmashImmune

View File

@@ -26,6 +26,7 @@
id: CP14BaseLockpick
name: lockpick
description: A thief's tool that, with proper skill and skill, allows you to pick any lock.
categories: [ ForkFiltered ]
components:
- type: Sprite
sprite: _CP14/Objects/keys.rsi

View File

@@ -2,6 +2,7 @@
id: CP14AlchemyNormalizer
name: cp14-store-buy-alchemy-normalizer-name
desc: cp14-store-buy-alchemy-normalizer-desc
code: ALH-NRML
icon:
sprite: _CP14/Structures/Specific/Alchemy/normalizer.rsi
state: base
@@ -11,4 +12,20 @@
services:
- !type:CP14BuyItemsService
product:
CP14AlchemyNormalizer: 1
CP14AlchemyNormalizer: 1
- type: storePositionBuy
id: CP14AlchemyVials
name: cp14-store-buy-alchemy-vials-name
desc: cp14-store-buy-alchemy-vials-desc
code: ALH-VIAL
icon:
sprite: _CP14/Objects/Specific/Alchemy/vial_small.rsi
state: vial
price:
min: 200
max: 300
services:
- !type:CP14BuyItemsService
product:
CP14BrassChestFilledAlchemy: 1

View File

@@ -3,6 +3,7 @@
id: CP14DebugWorldSprite
name: strange copper bar
suffix: CP, DEBUG
categories: [ ForkFiltered ]
components:
# Just copy me, I am block with name Bob
- type: Appearance

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,17 @@
{
"version": 1,
"license": "CLA",
"copyright": "Created by TheShuEd (Github) for CrystallPunk14",
"size": {
"x": 144,
"y": 128
},
"states": [
{
"name": "left"
},
{
"name": "right"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,17 @@
{
"version": 1,
"license": "CLA",
"copyright": "Created by TheShuEd (Github) for CrystallPunk14",
"size": {
"x": 96,
"y": 80
},
"states": [
{
"name": "left"
},
{
"name": "right"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB