Demiplans expeditions (#523)
* simple expedition generation * add simple test key * expedition map component * some funny procedural testing * refactor expeditions from planetbiome to islanddungeons * some work * fix: grid dungeon, not map planet dungeon * unhardcode map components * finish T1 expedition generation * Update preset.yml * indestructable stone * mob water occlusion * caves T1 expedition * Update CP14SpawnExpeditionJob.cs * Delete shared MissionParams * rename to demiplans * pass mapid into job * demiplan connections * demiplan exits * random entry points * Update config.yml * some cleanup and renaming * radius one-time teleport * rename connections to exitPoint * merge entry and exit point into rift component * demipan closing - all rifts deletion * demiplanEEEEEE * fixes * delete floating visuals * Update CP14DemiplaneTravelingSystem.cs * intro and outro demiplan music * rift cores and flashing * pulling support * pulling fix + generatordata fix? * auto destrot demiplans??
118
Content.Server/_CP14/Demiplane/CP14DemiplanSystem.Connections.cs
Normal file
@@ -0,0 +1,118 @@
|
||||
using Content.Shared._CP14.Demiplane.Components;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server._CP14.Demiplane;
|
||||
|
||||
public sealed partial class CP14DemiplaneSystem
|
||||
{
|
||||
private void InitConnections()
|
||||
{
|
||||
SubscribeLocalEvent<CP14DemiplaneRiftComponent, MapInitEvent>(OnRiftInit);
|
||||
SubscribeLocalEvent<CP14DemiplaneRiftComponent, ComponentShutdown>(OnRiftShutdown);
|
||||
}
|
||||
|
||||
private void OnRiftInit(Entity<CP14DemiplaneRiftComponent> rift, ref MapInitEvent args)
|
||||
{
|
||||
var map = Transform(rift).MapUid;
|
||||
if (TryComp<CP14DemiplaneComponent>(map, out var demiplan)) // In demiplan
|
||||
{
|
||||
if (rift.Comp.TryAutoLinkToMap)
|
||||
rift.Comp.Demiplan = (map.Value, demiplan);
|
||||
|
||||
if (rift.Comp.ActiveTeleport)
|
||||
AddDemiplanRandomEntryPoint((map.Value, demiplan), rift);
|
||||
}
|
||||
else if (rift.Comp.Demiplan is not null) //We out of demiplan
|
||||
{
|
||||
if (rift.Comp.ActiveTeleport)
|
||||
AddDemiplanRandomExitPoint(rift.Comp.Demiplan.Value, rift);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnRiftShutdown(Entity<CP14DemiplaneRiftComponent> rift, ref ComponentShutdown args)
|
||||
{
|
||||
if (rift.Comp.Demiplan is null)
|
||||
return;
|
||||
|
||||
RemoveDemiplanRandomEntryPoint(rift.Comp.Demiplan, rift);
|
||||
RemoveDemiplanRandomExitPoint(rift.Comp.Demiplan, rift);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///Add a position in the real world where you can get out of this demiplan
|
||||
/// </summary>
|
||||
private void AddDemiplanRandomExitPoint(Entity<CP14DemiplaneComponent> demiplan,
|
||||
Entity<CP14DemiplaneRiftComponent> exitPoint)
|
||||
{
|
||||
if (demiplan.Comp.ExitPoints.Contains(exitPoint))
|
||||
return;
|
||||
|
||||
demiplan.Comp.ExitPoints.Add(exitPoint);
|
||||
exitPoint.Comp.Demiplan = demiplan;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removing the demiplan exit point, one of which the player can exit to
|
||||
/// </summary>
|
||||
private void RemoveDemiplanRandomExitPoint(Entity<CP14DemiplaneComponent>? demiplan,
|
||||
Entity<CP14DemiplaneRiftComponent> exitPoint)
|
||||
{
|
||||
if (demiplan is not null && demiplan.Value.Comp.ExitPoints.Contains(exitPoint))
|
||||
{
|
||||
demiplan.Value.Comp.ExitPoints.Remove(exitPoint);
|
||||
exitPoint.Comp.Demiplan = null;
|
||||
}
|
||||
|
||||
if (exitPoint.Comp.DeleteAfterDisconnect)
|
||||
QueueDel(exitPoint);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a position within the demiplan that can be entered into the demiplan
|
||||
/// </summary>
|
||||
private void AddDemiplanRandomEntryPoint(Entity<CP14DemiplaneComponent> demiplan,
|
||||
Entity<CP14DemiplaneRiftComponent> entryPoint)
|
||||
{
|
||||
if (demiplan.Comp.EntryPoints.Contains(entryPoint))
|
||||
return;
|
||||
|
||||
demiplan.Comp.EntryPoints.Add(entryPoint);
|
||||
entryPoint.Comp.Demiplan = demiplan;
|
||||
}
|
||||
|
||||
private void RemoveDemiplanRandomEntryPoint(Entity<CP14DemiplaneComponent>? demiplan,
|
||||
Entity<CP14DemiplaneRiftComponent> entryPoint)
|
||||
{
|
||||
if (demiplan is not null && demiplan.Value.Comp.EntryPoints.Contains(entryPoint))
|
||||
{
|
||||
demiplan.Value.Comp.EntryPoints.Remove(entryPoint);
|
||||
entryPoint.Comp.Demiplan = null;
|
||||
}
|
||||
|
||||
if (entryPoint.Comp.DeleteAfterDisconnect)
|
||||
QueueDel(entryPoint);
|
||||
}
|
||||
|
||||
public bool TryGetDemiplanEntryPoint(Entity<CP14DemiplaneComponent> demiplan, out Entity<CP14DemiplaneRiftComponent>? entryPoint)
|
||||
{
|
||||
entryPoint = null;
|
||||
|
||||
if (demiplan.Comp.EntryPoints.Count == 0)
|
||||
return false;
|
||||
|
||||
entryPoint = _random.Pick(demiplan.Comp.EntryPoints);
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TryGetDemiplanExitPoint(Entity<CP14DemiplaneComponent> demiplan,
|
||||
out Entity<CP14DemiplaneRiftComponent>? exitPoint)
|
||||
{
|
||||
exitPoint = null;
|
||||
|
||||
if (demiplan.Comp.ExitPoints.Count == 0)
|
||||
return false;
|
||||
|
||||
exitPoint = _random.Pick(demiplan.Comp.ExitPoints);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
121
Content.Server/_CP14/Demiplane/CP14DemiplanSystem.Generation.cs
Normal file
@@ -0,0 +1,121 @@
|
||||
using System.Threading;
|
||||
using Content.Server._CP14.Demiplane.Components;
|
||||
using Content.Server._CP14.Demiplane.Jobs;
|
||||
using Content.Shared._CP14.Demiplane.Components;
|
||||
using Content.Shared._CP14.Demiplane.Prototypes;
|
||||
using Content.Shared.Interaction.Events;
|
||||
using Robust.Shared.CPUJob.JobQueues;
|
||||
using Robust.Shared.CPUJob.JobQueues.Queues;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server._CP14.Demiplane;
|
||||
|
||||
public sealed partial class CP14DemiplaneSystem
|
||||
{
|
||||
private readonly JobQueue _expeditionQueue = new();
|
||||
private readonly List<(CP14SpawnRandomDemiplaneJob Job, CancellationTokenSource CancelToken)> _expeditionJobs = new();
|
||||
private const double JobMaxTime = 0.002;
|
||||
|
||||
private void InitGeneration()
|
||||
{
|
||||
SubscribeLocalEvent<CP14DemiplaneGeneratorDataComponent, MapInitEvent>(GeneratorMapInit);
|
||||
SubscribeLocalEvent<CP14DemiplaneGeneratorDataComponent, UseInHandEvent>(GeneratorUsedInHand);
|
||||
}
|
||||
|
||||
private void UpdateGeneration(float frameTime)
|
||||
{
|
||||
_expeditionQueue.Process();
|
||||
|
||||
foreach (var (job, cancelToken) in _expeditionJobs.ToArray())
|
||||
{
|
||||
switch (job.Status)
|
||||
{
|
||||
case JobStatus.Finished:
|
||||
_expeditionJobs.Remove((job, cancelToken));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generates a new random demiplane based on the specified parameters
|
||||
/// </summary>
|
||||
public void SpawnRandomDemiplane(ProtoId<CP14DemiplaneLocationPrototype> location, out Entity<CP14DemiplaneComponent> demiplan, out MapId mapId)
|
||||
{
|
||||
var mapUid = _mapSystem.CreateMap(out mapId, runMapInit: false);
|
||||
var demiComp = EntityManager.EnsureComponent<CP14DemiplaneComponent>(mapUid);
|
||||
demiplan = (mapUid, demiComp);
|
||||
|
||||
var cancelToken = new CancellationTokenSource();
|
||||
var job = new CP14SpawnRandomDemiplaneJob(
|
||||
JobMaxTime,
|
||||
EntityManager,
|
||||
_logManager,
|
||||
_mapManager,
|
||||
_proto,
|
||||
_dungeon,
|
||||
_metaData,
|
||||
_mapSystem,
|
||||
mapUid,
|
||||
mapId,
|
||||
location,
|
||||
_random.Next(-10000, 10000),
|
||||
cancelToken.Token);
|
||||
|
||||
_expeditionJobs.Add((job, cancelToken));
|
||||
_expeditionQueue.EnqueueJob(job);
|
||||
}
|
||||
|
||||
private void GeneratorUsedInHand(Entity<CP14DemiplaneGeneratorDataComponent> generator, ref UseInHandEvent args)
|
||||
{
|
||||
if (generator.Comp.LocationConfig is null)
|
||||
return;
|
||||
|
||||
SpawnRandomDemiplane(generator.Comp.LocationConfig.Value, out var demiplane, out var mapId);
|
||||
|
||||
//TEST
|
||||
EnsureComp<CP14DemiplaneDestroyWithoutPlayersComponent>(demiplane);
|
||||
|
||||
var tempRift = EntityManager.Spawn("CP14DemiplaneTimedRadiusPassway");
|
||||
var tempRift2 = EntityManager.Spawn("CP14DemiplanRiftCore");
|
||||
_transform.SetCoordinates(tempRift, Transform(args.User).Coordinates);
|
||||
_transform.SetCoordinates(tempRift2, Transform(args.User).Coordinates);
|
||||
|
||||
var connection = EnsureComp<CP14DemiplaneRiftComponent>(tempRift);
|
||||
var connection2 = EnsureComp<CP14DemiplaneRiftComponent>(tempRift2);
|
||||
AddDemiplanRandomExitPoint(demiplane, (tempRift, connection));
|
||||
AddDemiplanRandomExitPoint(demiplane, (tempRift2, connection2));
|
||||
|
||||
QueueDel(generator); //wtf its crash debug build?
|
||||
}
|
||||
|
||||
private void GeneratorMapInit(Entity<CP14DemiplaneGeneratorDataComponent> generator, ref MapInitEvent args)
|
||||
{
|
||||
// Here, a unique Demiplan config should be generated based on the CP14DemiplanGeneratorDataComponent
|
||||
|
||||
//Location generation
|
||||
HashSet<CP14DemiplaneLocationPrototype> suitableConfigs = new();
|
||||
foreach (var locationConfig in _proto.EnumeratePrototypes<CP14DemiplaneLocationPrototype>())
|
||||
{
|
||||
suitableConfigs.Add(locationConfig);
|
||||
}
|
||||
|
||||
if (suitableConfigs.Count == 0)
|
||||
{
|
||||
Log.Error("Expedition mission generation failed: No suitable location configs.");
|
||||
QueueDel(generator);
|
||||
return;
|
||||
}
|
||||
|
||||
var selectedConfig = _random.Pick(suitableConfigs);
|
||||
generator.Comp.LocationConfig = selectedConfig;
|
||||
|
||||
//Modifier generation
|
||||
|
||||
//Scenario generation
|
||||
|
||||
//ETC generation
|
||||
}
|
||||
}
|
||||
124
Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.cs
Normal file
@@ -0,0 +1,124 @@
|
||||
using Content.Server.Flash;
|
||||
using Content.Server.Procedural;
|
||||
using Content.Shared._CP14.Demiplane;
|
||||
using Content.Shared._CP14.Demiplane.Components;
|
||||
using Robust.Server.Audio;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server._CP14.Demiplane;
|
||||
|
||||
public sealed partial class CP14DemiplaneSystem : CP14SharedDemiplaneSystem
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly ILogManager _logManager = default!;
|
||||
[Dependency] private readonly IMapManager _mapManager = default!;
|
||||
[Dependency] private readonly DungeonSystem _dungeon = default!;
|
||||
[Dependency] private readonly MetaDataSystem _metaData = default!;
|
||||
[Dependency] private readonly SharedMapSystem _mapSystem = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly AudioSystem _audio = default!;
|
||||
[Dependency] private readonly FlashSystem _flash = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
InitGeneration();
|
||||
InitConnections();
|
||||
|
||||
SubscribeLocalEvent<CP14DemiplaneComponent, ComponentShutdown>(OnDemiplanShutdown);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
||||
UpdateGeneration(frameTime);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Teleports the entity inside the demiplane, to one of the random entry points.
|
||||
/// </summary>
|
||||
/// <param name="demiplane">The demiplane the entity will be teleported to</param>
|
||||
/// <param name="entity">The entity to be teleported</param>
|
||||
/// <returns></returns>
|
||||
public bool TryTeleportIntoDemiplane(Entity<CP14DemiplaneComponent> demiplane, EntityUid? entity)
|
||||
{
|
||||
if (entity is null)
|
||||
return false;
|
||||
|
||||
if (!TryGetDemiplanEntryPoint(demiplane, out var entryPoint) || entryPoint is null)
|
||||
{
|
||||
Log.Error($"{entity} cant get in demiplane {demiplane}: no active entry points!");
|
||||
return false;
|
||||
}
|
||||
|
||||
var targetCoord = Transform(entryPoint.Value).Coordinates;
|
||||
_flash.Flash(entity.Value, null, null, 3000f, 0.5f);
|
||||
_transform.SetCoordinates(entity.Value, targetCoord);
|
||||
_audio.PlayGlobal(demiplane.Comp.ArrivalSound, entity.Value);
|
||||
|
||||
|
||||
var ev = new CP14DemiplanEntityEnterEvent(entity.Value);
|
||||
RaiseLocalEvent(demiplane, ev);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Teleports an entity from the demiplane to the real world, to one of the random exit points in the real world.
|
||||
/// </summary>
|
||||
/// <param name="demiplane">The demiplane from which the entity will be teleported</param>
|
||||
/// <param name="entity">An entity that will be teleported into the real world. This entity must be in the demiplane, otherwise the function will not work.</param>
|
||||
/// <returns></returns>
|
||||
public bool TryTeleportOutDemiplane(Entity<CP14DemiplaneComponent> demiplane, EntityUid? entity)
|
||||
{
|
||||
if (entity is null)
|
||||
return false;
|
||||
|
||||
if (Transform(entity.Value).MapUid != demiplane.Owner)
|
||||
return false;
|
||||
|
||||
if (!TryGetDemiplanExitPoint(demiplane, out var connection) || connection is null)
|
||||
{
|
||||
Log.Error($"{entity} cant get out of demiplane {demiplane}: no active connections!");
|
||||
return false;
|
||||
}
|
||||
|
||||
var targetCoord = Transform(connection.Value).Coordinates;
|
||||
_flash.Flash(entity.Value, null, null, 3000f, 0.5f);
|
||||
_transform.SetCoordinates(entity.Value, targetCoord);
|
||||
_audio.PlayGlobal(demiplane.Comp.DepartureSound, entity.Value);
|
||||
|
||||
var ev = new CP14DemiplanEntityLeaveEvent(entity.Value);
|
||||
RaiseLocalEvent(demiplane, ev);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void OnDemiplanShutdown(Entity<CP14DemiplaneComponent> demiplane, ref ComponentShutdown args)
|
||||
{
|
||||
//We stop asynchronous generation of a demiplane early if for some reason this demiplane is deleted before generation is complete
|
||||
foreach (var (job, cancelToken) in _expeditionJobs.ToArray())
|
||||
{
|
||||
if (job.DemiplaneMapUid == demiplane.Owner)
|
||||
{
|
||||
cancelToken.Cancel();
|
||||
_expeditionJobs.Remove((job, cancelToken));
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var exit in demiplane.Comp.ExitPoints)
|
||||
{
|
||||
RemoveDemiplanRandomExitPoint(demiplane, exit);
|
||||
}
|
||||
|
||||
foreach (var entry in demiplane.Comp.EntryPoints)
|
||||
{
|
||||
RemoveDemiplanRandomEntryPoint(demiplane, entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using Content.Shared._CP14.Demiplane.Components;
|
||||
using Content.Shared._CP14.Demiplane.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._CP14.Demiplane.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Stores the data needed to generate a new demiplane
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(CP14DemiplaneSystem))]
|
||||
public sealed partial class CP14DemiplaneGeneratorDataComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public ProtoId<CP14DemiplaneLocationPrototype>? LocationConfig;
|
||||
|
||||
//Generation settings
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Procedural;
|
||||
using Content.Shared._CP14.Demiplane.Prototypes;
|
||||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Gravity;
|
||||
using Robust.Shared.CPUJob.JobQueues;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._CP14.Demiplane.Jobs;
|
||||
|
||||
public sealed class CP14SpawnRandomDemiplaneJob : Job<bool>
|
||||
{
|
||||
private readonly IEntityManager _entManager;
|
||||
//private readonly IGameTiming _timing;
|
||||
private readonly IMapManager _mapManager;
|
||||
private readonly IPrototypeManager _prototypeManager;
|
||||
//private readonly AnchorableSystem _anchorable;
|
||||
private readonly DungeonSystem _dungeon;
|
||||
private readonly MetaDataSystem _metaData;
|
||||
//private readonly SharedTransformSystem _xforms;
|
||||
private readonly SharedMapSystem _map;
|
||||
|
||||
private readonly ProtoId<CP14DemiplaneLocationPrototype> _config;
|
||||
private readonly int _seed;
|
||||
|
||||
public readonly EntityUid DemiplaneMapUid;
|
||||
private readonly MapId _demiplaneMapId;
|
||||
|
||||
private readonly ISawmill _sawmill;
|
||||
|
||||
public CP14SpawnRandomDemiplaneJob(
|
||||
double maxTime,
|
||||
IEntityManager entManager,
|
||||
ILogManager logManager,
|
||||
IMapManager mapManager,
|
||||
IPrototypeManager protoManager,
|
||||
DungeonSystem dungeon,
|
||||
MetaDataSystem metaData,
|
||||
SharedMapSystem map,
|
||||
EntityUid demiplaneMapUid,
|
||||
MapId demiplaneMapId,
|
||||
ProtoId<CP14DemiplaneLocationPrototype> config,
|
||||
int seed,
|
||||
CancellationToken cancellation = default) : base(maxTime, cancellation)
|
||||
{
|
||||
_entManager = entManager;
|
||||
_mapManager = mapManager;
|
||||
_prototypeManager = protoManager;
|
||||
_dungeon = dungeon;
|
||||
_metaData = metaData;
|
||||
_map = map;
|
||||
DemiplaneMapUid = demiplaneMapUid;
|
||||
_demiplaneMapId = demiplaneMapId;
|
||||
_config = config;
|
||||
_seed = seed;
|
||||
|
||||
_sawmill = logManager.GetSawmill("cp14_expedition_job");
|
||||
}
|
||||
|
||||
protected override async Task<bool> Process()
|
||||
{
|
||||
_sawmill.Debug("cp14_expedition", $"Spawning expedition mission with seed {0}");
|
||||
var grid = _mapManager.CreateGridEntity(DemiplaneMapUid);
|
||||
|
||||
MetaDataComponent? metadata = null;
|
||||
|
||||
_metaData.SetEntityName(DemiplaneMapUid, "TODO: MAP Expedition name generation");
|
||||
_metaData.SetEntityName(grid, "TODO: GRID Expedition name generation");
|
||||
|
||||
//Spawn island config
|
||||
var expeditionConfig = _prototypeManager.Index(_config);
|
||||
var locationConfig = _prototypeManager.Index(expeditionConfig.LocationConfig);
|
||||
_dungeon.GenerateDungeon(locationConfig,
|
||||
grid,
|
||||
grid,
|
||||
Vector2i.Zero,
|
||||
_seed); //Not async, because dont work with biomespawner boilerplate
|
||||
|
||||
//Add map components
|
||||
_entManager.AddComponents(DemiplaneMapUid, expeditionConfig.Components);
|
||||
|
||||
//Setup gravity
|
||||
var gravity = _entManager.EnsureComponent<GravityComponent>(DemiplaneMapUid);
|
||||
gravity.Enabled = true;
|
||||
_entManager.Dirty(DemiplaneMapUid, gravity, metadata);
|
||||
|
||||
// Setup default atmos
|
||||
var moles = new float[Atmospherics.AdjustedNumberOfGases];
|
||||
moles[(int) Gas.Oxygen] = 21.824779f;
|
||||
moles[(int) Gas.Nitrogen] = 82.10312f;
|
||||
var mixture = new GasMixture(moles, Atmospherics.T20C);
|
||||
_entManager.System<AtmosphereSystem>().SetMapAtmosphere(DemiplaneMapUid, false, mixture);
|
||||
|
||||
_mapManager.DoMapInitialize(_demiplaneMapId);
|
||||
_mapManager.SetMapPaused(_demiplaneMapId, false);
|
||||
|
||||
//Dungeon
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
using Content.Server._CP14.Demiplane;
|
||||
using Content.Server.Mind;
|
||||
using Content.Shared._CP14.Demiplane;
|
||||
using Content.Shared._CP14.Demiplane.Components;
|
||||
using Content.Shared._CP14.DemiplaneTraveling;
|
||||
using Content.Shared.Ghost;
|
||||
using Content.Shared.Movement.Pulling.Components;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Server._CP14.DemiplaneTraveling;
|
||||
|
||||
public sealed partial class CP14DemiplaneTravelingSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly CP14DemiplaneSystem _demiplan = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly EntityLookupSystem _lookup = default!;
|
||||
[Dependency] private readonly MindSystem _mind = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<CP14DemiplaneRadiusTimedPasswayComponent, MapInitEvent>(RadiusMapInit);
|
||||
SubscribeLocalEvent<CP14DemiplaneRiftOpenedComponent, CP14DemiplanPasswayUseDoAfter>(OnOpenRiftInteractDoAfter);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
||||
//Radius passway
|
||||
var query = EntityQueryEnumerator<CP14DemiplaneRadiusTimedPasswayComponent, CP14DemiplaneRiftComponent>();
|
||||
while (query.MoveNext(out var uid, out var passway, out var rift))
|
||||
{
|
||||
if (_timing.CurTime < passway.NextTimeTeleport)
|
||||
continue;
|
||||
|
||||
passway.NextTimeTeleport = _timing.CurTime + passway.Delay;
|
||||
|
||||
HashSet<EntityUid> teleportedEnts = new();
|
||||
var nearestEnts = _lookup.GetEntitiesInRange(uid, passway.Radius);
|
||||
foreach (var ent in nearestEnts)
|
||||
{
|
||||
if (HasComp<GhostComponent>(ent))
|
||||
continue;
|
||||
|
||||
if (!_mind.TryGetMind(ent, out var mindId, out var mind))
|
||||
continue;
|
||||
|
||||
teleportedEnts.Add(ent);
|
||||
}
|
||||
|
||||
while (teleportedEnts.Count > passway.MaxEntities)
|
||||
{
|
||||
teleportedEnts.Remove(_random.Pick(teleportedEnts));
|
||||
}
|
||||
|
||||
var map = Transform(uid).MapUid;
|
||||
if (TryComp<CP14DemiplaneComponent>(map, out var demiplan))
|
||||
{
|
||||
if (!_demiplan.TryGetDemiplanExitPoint((map.Value, demiplan), out _))
|
||||
break;
|
||||
|
||||
foreach (var ent in teleportedEnts) //We in demiplan, tp OUT
|
||||
{
|
||||
if (TryComp<PullerComponent>(ent, out var puller))
|
||||
_demiplan.TryTeleportOutDemiplane((map.Value, demiplan), puller.Pulling);
|
||||
|
||||
_demiplan.TryTeleportOutDemiplane((map.Value, demiplan), ent);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (rift.Demiplan is not null)
|
||||
{
|
||||
if (!_demiplan.TryGetDemiplanEntryPoint(rift.Demiplan.Value, out _))
|
||||
break;
|
||||
|
||||
foreach (var ent in teleportedEnts) //We out demiplan, tp IN
|
||||
{
|
||||
if (TryComp<PullerComponent>(ent, out var puller))
|
||||
_demiplan.TryTeleportIntoDemiplane(rift.Demiplan.Value, puller.Pulling);
|
||||
|
||||
_demiplan.TryTeleportIntoDemiplane(rift.Demiplan.Value, ent);
|
||||
}
|
||||
}
|
||||
}
|
||||
QueueDel(uid);
|
||||
}
|
||||
}
|
||||
|
||||
private void RadiusMapInit(Entity<CP14DemiplaneRadiusTimedPasswayComponent> radiusPassWay, ref MapInitEvent args)
|
||||
{
|
||||
radiusPassWay.Comp.NextTimeTeleport = _timing.CurTime + radiusPassWay.Comp.Delay;
|
||||
}
|
||||
|
||||
private void OnOpenRiftInteractDoAfter(Entity<CP14DemiplaneRiftOpenedComponent> passWay, ref CP14DemiplanPasswayUseDoAfter args)
|
||||
{
|
||||
if (args.Cancelled || args.Handled)
|
||||
return;
|
||||
|
||||
var used = false;
|
||||
var map = Transform(passWay).MapUid;
|
||||
if (TryComp<CP14DemiplaneComponent>(map, out var demiplan))
|
||||
{
|
||||
if (TryComp<PullerComponent>(args.User, out var puller))
|
||||
_demiplan.TryTeleportOutDemiplane((map.Value, demiplan), puller.Pulling);
|
||||
|
||||
used = _demiplan.TryTeleportOutDemiplane((map.Value, demiplan), args.User);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (TryComp<CP14DemiplaneRiftComponent>(passWay, out var exitPoint) && exitPoint.Demiplan is not null)
|
||||
{
|
||||
if (TryComp<PullerComponent>(args.User, out var puller))
|
||||
_demiplan.TryTeleportIntoDemiplane(exitPoint.Demiplan.Value, puller.Pulling);
|
||||
|
||||
used = _demiplan.TryTeleportIntoDemiplane(exitPoint.Demiplan.Value, args.User);
|
||||
}
|
||||
}
|
||||
|
||||
if (passWay.Comp.MaxUse > 0 && used)
|
||||
{
|
||||
passWay.Comp.MaxUse--;
|
||||
if (passWay.Comp.MaxUse == 0)
|
||||
QueueDel(passWay);
|
||||
}
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
}
|
||||
@@ -47,6 +47,12 @@ public sealed partial class CP14DayCycleComponent : Component
|
||||
[DataDefinition, NetSerializable, Serializable]
|
||||
public readonly partial record struct DayCycleEntry()
|
||||
{
|
||||
public DayCycleEntry(Color _color, TimeSpan _duration, string _period) : this()
|
||||
{
|
||||
Color = _color;
|
||||
Duration = _duration;
|
||||
Period = _period;
|
||||
}
|
||||
/// <summary>
|
||||
/// The color of the world's lights at the beginning of this time of day
|
||||
/// </summary>
|
||||
|
||||
92
Content.Shared/_CP14/Demiplane/CP14SharedDemiplanSytem.cs
Normal file
@@ -0,0 +1,92 @@
|
||||
using Content.Shared._CP14.Demiplane.Components;
|
||||
using Content.Shared._CP14.DemiplaneTraveling;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.Interaction;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._CP14.Demiplane;
|
||||
|
||||
public abstract partial class CP14SharedDemiplaneSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<CP14DemiplaneRiftOpenedComponent, InteractHandEvent>(OnDemiplanPasswayInteract);
|
||||
|
||||
SubscribeLocalEvent<CP14DemiplaneDestroyWithoutPlayersComponent, CP14DemiplanEntityEnterEvent>(OnEntityEnter);
|
||||
SubscribeLocalEvent<CP14DemiplaneDestroyWithoutPlayersComponent, CP14DemiplanEntityLeaveEvent>(OnEntityLeave);
|
||||
}
|
||||
|
||||
private void OnEntityLeave(Entity<CP14DemiplaneDestroyWithoutPlayersComponent> ent, ref CP14DemiplanEntityLeaveEvent args)
|
||||
{
|
||||
//это можно легко абузить, если игроки найдут способ выходить из
|
||||
//демиплана другим способом. Лучше добавлять на игроков компонент, и тречить все смены карт у этого компонента
|
||||
if (ent.Comp.Players.Contains(args.Player))
|
||||
{
|
||||
ent.Comp.Players.Remove(args.Player);
|
||||
if (ent.Comp.Players.Count == 0)
|
||||
{
|
||||
QueueDel(ent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnEntityEnter(Entity<CP14DemiplaneDestroyWithoutPlayersComponent> ent, ref CP14DemiplanEntityEnterEvent args)
|
||||
{
|
||||
if (!TryComp<ActorComponent>(args.Player, out var actor))
|
||||
return;
|
||||
|
||||
ent.Comp.Players.Add(args.Player);
|
||||
}
|
||||
|
||||
private void OnDemiplanPasswayInteract(Entity<CP14DemiplaneRiftOpenedComponent> passway, ref InteractHandEvent args)
|
||||
{
|
||||
_doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager,
|
||||
args.User,
|
||||
passway.Comp.DoAfter,
|
||||
new CP14DemiplanPasswayUseDoAfter(),
|
||||
args.Target,
|
||||
args.Target)
|
||||
{
|
||||
BreakOnDamage = true,
|
||||
BreakOnMove = true,
|
||||
BreakOnHandChange = true,
|
||||
NeedHand = true,
|
||||
MovementThreshold = 0.2f,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed partial class CP14DemiplanPasswayUseDoAfter : SimpleDoAfterEvent
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Is invoked on the demiplane when new players enter. This only applies to rift entrances, any other methods will not be taken into account.
|
||||
/// </summary>
|
||||
public sealed class CP14DemiplanEntityEnterEvent : EntityEventArgs
|
||||
{
|
||||
public EntityUid Player;
|
||||
|
||||
public CP14DemiplanEntityEnterEvent(EntityUid player)
|
||||
{
|
||||
Player = player;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Is invoked on the demiplane when some players left. This only applies to rift entrances, any other methods will not be taken into account.
|
||||
/// </summary>
|
||||
public sealed class CP14DemiplanEntityLeaveEvent : EntityEventArgs
|
||||
{
|
||||
public EntityUid Player;
|
||||
|
||||
public CP14DemiplanEntityLeaveEvent(EntityUid player)
|
||||
{
|
||||
Player = player;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using Robust.Shared.Audio;
|
||||
|
||||
namespace Content.Shared._CP14.Demiplane.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Designates this entity as holding a demiplane.
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(CP14SharedDemiplaneSystem))]
|
||||
public sealed partial class CP14DemiplaneComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// All entities in the real world that are connected to this demiplane
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
[DataField]
|
||||
public HashSet<Entity<CP14DemiplaneRiftComponent>> ExitPoints = new();
|
||||
|
||||
/// <summary>
|
||||
/// All entities in the demiplane in which the objects entered in the demiplane appear
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
[DataField]
|
||||
public HashSet<Entity<CP14DemiplaneRiftComponent>> EntryPoints = new();
|
||||
|
||||
/// <summary>
|
||||
/// The sound of entering a demiplane, played locally to the player who entered it.
|
||||
/// Consider more as an intro sound “You have entered the demiplane. Good luck.”
|
||||
/// </summary>
|
||||
[DataField("arrivalSound")]
|
||||
public SoundSpecifier ArrivalSound = new SoundCollectionSpecifier("CP14DemiplaneIntro");
|
||||
|
||||
/// <summary>
|
||||
/// The sound of exiting the demiplane, played locally to the player who exited the demiplane.
|
||||
/// Consider it more as an ending sound
|
||||
/// </summary>
|
||||
[DataField("departureSound")]
|
||||
public SoundSpecifier DepartureSound = new SoundCollectionSpecifier("CP14DemiplaneIntro");
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
namespace Content.Shared._CP14.Demiplane.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Automatically deletes the demiplane if everyone who entered it, exited back out, or died.
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(CP14SharedDemiplaneSystem))]
|
||||
public sealed partial class CP14DemiplaneDestroyWithoutPlayersComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public HashSet<EntityUid> Players = new();
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
namespace Content.Shared._CP14.Demiplane.Components;
|
||||
|
||||
/// <summary>
|
||||
/// An entity that is the link between the demiplane and the real world. Depending on whether it is in the real world or in the demiplane
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(CP14SharedDemiplaneSystem))]
|
||||
public sealed partial class CP14DemiplaneRiftComponent : Component
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
[DataField]
|
||||
public Entity<CP14DemiplaneComponent>? Demiplan;
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the map on which this rift is initialized is a demiplane to automatically bind to it. QoL thing.
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
[DataField]
|
||||
public bool TryAutoLinkToMap = true;
|
||||
|
||||
/// <summary>
|
||||
/// will this rift become one of the random entry or exit points of the demiplane
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
[DataField]
|
||||
public bool ActiveTeleport = true;
|
||||
|
||||
[DataField]
|
||||
public bool DeleteAfterDisconnect = true;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using Content.Shared.Procedural;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._CP14.Demiplane.Prototypes;
|
||||
|
||||
/// <summary>
|
||||
/// procedural location template. The answer to the question “Where” as far as the combinatorics of the expedition is concerned.
|
||||
/// </summary>
|
||||
[Prototype("cp14DemiplaneLocation")]
|
||||
public sealed partial class CP14DemiplaneLocationPrototype : IPrototype
|
||||
{
|
||||
[IdDataField] public string ID { get; } = default!;
|
||||
|
||||
[DataField(required: true)]
|
||||
public ProtoId<DungeonConfigPrototype> LocationConfig;
|
||||
|
||||
[DataField]
|
||||
public ComponentRegistry Components = new();
|
||||
|
||||
//Player faced description
|
||||
|
||||
//Tier restriction
|
||||
|
||||
//Some abstract restriction?
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
namespace Content.Shared._CP14.DemiplaneTraveling;
|
||||
|
||||
/// <summary>
|
||||
/// teleports a certain number of entities between demiplanes with a delay
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class CP14DemiplaneRadiusTimedPasswayComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public int MaxEntities = 3;
|
||||
|
||||
[DataField]
|
||||
public TimeSpan Delay = TimeSpan.FromSeconds(10f);
|
||||
|
||||
[DataField]
|
||||
public float Radius = 3f;
|
||||
|
||||
[DataField]
|
||||
public TimeSpan NextTimeTeleport = TimeSpan.Zero;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
namespace Content.Shared._CP14.DemiplaneTraveling;
|
||||
|
||||
/// <summary>
|
||||
/// if located on an entity with a CP14DemiplanRiftComponent, allows users to move through that rift via an interaction with doAfter
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class CP14DemiplaneRiftOpenedComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// The number of teleportations this teleporter can make before disappearing. Use the negative number to make infinite.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public int MaxUse = -1;
|
||||
|
||||
[DataField]
|
||||
public float DoAfter = 4f;
|
||||
}
|
||||
@@ -666,6 +666,8 @@ public $TYPE$ $NAME$;</s:String>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Cooldowns/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Cryostorage/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Deadminned/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=demiplan/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=demiplane/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Dentification/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Diethylamine/@EntryIndexedValue">True</s:Boolean>
|
||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=doafter/@EntryIndexedValue">True</s:Boolean>
|
||||
|
||||
14
Resources/Audio/_CP14/Ambience/Demiplane/attributions.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
- files: ["intro1.ogg"]
|
||||
license: "CC-BY-4.0"
|
||||
copyright: 'by PatrickLieberkind of Freesound.org'
|
||||
source: "https://freesound.org/people/PatrickLieberkind/sounds/414266/"
|
||||
|
||||
- files: ["intro2.ogg"]
|
||||
license: "CC0-1.0"
|
||||
copyright: 'by DneproMan of Freesound.org.'
|
||||
source: "https://freesound.org/people/DneproMan/sounds/256830/"
|
||||
|
||||
- files: ["intro3.ogg", "intro4.ogg"]
|
||||
license: "CC0-1.0"
|
||||
copyright: 'by Lumamorph of Freesound.org.'
|
||||
source: "https://freesound.org/people/Lumamorph/sounds/634320/"
|
||||
BIN
Resources/Audio/_CP14/Ambience/Demiplane/intro1.ogg
Normal file
BIN
Resources/Audio/_CP14/Ambience/Demiplane/intro2.ogg
Normal file
BIN
Resources/Audio/_CP14/Ambience/Demiplane/intro3.ogg
Normal file
BIN
Resources/Audio/_CP14/Ambience/Demiplane/intro4.ogg
Normal file
319
Resources/Maps/_CP14/Dungeon/grassland_island_exterior.yml
Normal file
@@ -0,0 +1,319 @@
|
||||
meta:
|
||||
format: 6
|
||||
postmapinit: false
|
||||
tilemap:
|
||||
0: Space
|
||||
9: CP14FloorFoundation
|
||||
13: CP14FloorGrass
|
||||
14: CP14FloorGrassLight
|
||||
15: CP14FloorGrassTall
|
||||
10: CP14FloorOakWoodPlanksBig
|
||||
12: CP14FloorOakWoodPlanksBroken
|
||||
11: CP14FloorOakWoodPlanksCruciform
|
||||
2: FloorAsteroidSand
|
||||
6: FloorAsteroidSandUnvariantized
|
||||
5: FloorAsteroidTile
|
||||
8: FloorBrokenWood
|
||||
82: FloorShuttleOrange
|
||||
1: FloorShuttlePurple
|
||||
89: FloorSteel
|
||||
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: CQAAAAAACQAAAAAACQAAAAAACQAAAAAACQAAAAAADQAAAAAADQAAAAAADQAAAAAADQAAAAAADQAAAAAADgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACQAAAAAACwAAAAAACgAAAAAACwAAAAAACQAAAAAADgAAAAAADgAAAAAADgAAAAAADQAAAAAADQAAAAAADQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACQAAAAAACgAAAAAACgAAAAAACgAAAAAADAAAAAAADwAAAAAADwAAAAAADgAAAAAADgAAAAAADgAAAAAADQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACQAAAAAACgAAAAAACwAAAAAACwAAAAAACQAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADwAAAAAADQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACQAAAAAACQAAAAAACQAAAAAACQAAAAAACQAAAAAADgAAAAAADgAAAAAADgAAAAAADQAAAAAADQAAAAAADgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAA
|
||||
version: 6
|
||||
0,1:
|
||||
ind: 0,1
|
||||
tiles: CgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAA
|
||||
version: 6
|
||||
0,-1:
|
||||
ind: 0,-1
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAA
|
||||
version: 6
|
||||
-1,0:
|
||||
ind: -1,0
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA
|
||||
version: 6
|
||||
-1,1:
|
||||
ind: -1,1
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA
|
||||
version: 6
|
||||
1,-1:
|
||||
ind: 1,-1
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAA
|
||||
version: 6
|
||||
1,0:
|
||||
ind: 1,0
|
||||
tiles: CgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAA
|
||||
version: 6
|
||||
1,1:
|
||||
ind: 1,1
|
||||
tiles: CgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAA
|
||||
version: 6
|
||||
-1,2:
|
||||
ind: -1,2
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
0,2:
|
||||
ind: 0,2
|
||||
tiles: AQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
1,2:
|
||||
ind: 1,2
|
||||
tiles: AQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
2,-1:
|
||||
ind: 2,-1
|
||||
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
2,0:
|
||||
ind: 2,0
|
||||
tiles: CgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAACgAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
2,1:
|
||||
ind: 2,1
|
||||
tiles: AQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
2,2:
|
||||
ind: 2,2
|
||||
tiles: AQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
version: 6
|
||||
- type: Gravity
|
||||
gravityShakeSound: !type:SoundPathSpecifier
|
||||
path: /Audio/Effects/alert.ogg
|
||||
- type: DecalGrid
|
||||
chunkCollection:
|
||||
version: 2
|
||||
nodes: []
|
||||
- type: LoadedMap
|
||||
- type: SpreaderGrid
|
||||
- type: GridPathfinding
|
||||
- type: RadiationGridResistance
|
||||
- proto: CP14BarrelWater
|
||||
entities:
|
||||
- uid: 12
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.5020437,1.6221794
|
||||
parent: 1
|
||||
- proto: CP14FenceWoodSmallCorner
|
||||
entities:
|
||||
- uid: 26
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 10.5,0.5
|
||||
parent: 1
|
||||
- uid: 33
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 10.5,4.5
|
||||
parent: 1
|
||||
- proto: CP14FenceWoodSmallStraight
|
||||
entities:
|
||||
- uid: 21
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 6.5,4.5
|
||||
parent: 1
|
||||
- uid: 22
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 6.5,0.5
|
||||
parent: 1
|
||||
- uid: 23
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 3.141592653589793 rad
|
||||
pos: 5.5,4.5
|
||||
parent: 1
|
||||
- uid: 24
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 5.5,0.5
|
||||
parent: 1
|
||||
- uid: 25
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 7.5,0.5
|
||||
parent: 1
|
||||
- uid: 28
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 10.5,1.5
|
||||
parent: 1
|
||||
- proto: CP14SpawnerExpeditionLootCommon
|
||||
entities:
|
||||
- uid: 2
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 9.5,3.5
|
||||
parent: 1
|
||||
- uid: 5
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 2.5,3.5
|
||||
parent: 1
|
||||
- uid: 32
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.5,3.5
|
||||
parent: 1
|
||||
- uid: 34
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 6.5,1.5
|
||||
parent: 1
|
||||
- proto: CP14TableWooden
|
||||
entities:
|
||||
- uid: 4
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 1.5,3.5
|
||||
parent: 1
|
||||
- uid: 19
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 2.5,3.5
|
||||
parent: 1
|
||||
- proto: CP14TableWoodenFrame
|
||||
entities:
|
||||
- uid: 3
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 3.5,3.5
|
||||
parent: 1
|
||||
- proto: CP14WallmountTorch
|
||||
entities:
|
||||
- uid: 30
|
||||
components:
|
||||
- type: Transform
|
||||
rot: 1.5707963267948966 rad
|
||||
pos: 5.5,3.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- uid: 35
|
||||
components:
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 3.5,1.5
|
||||
parent: 1
|
||||
- type: Fixtures
|
||||
fixtures: {}
|
||||
- proto: CP14WallWooden
|
||||
entities:
|
||||
- uid: 6
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,4.5
|
||||
parent: 1
|
||||
- uid: 7
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,0.5
|
||||
parent: 1
|
||||
- uid: 8
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,0.5
|
||||
parent: 1
|
||||
- uid: 9
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,3.5
|
||||
parent: 1
|
||||
- uid: 11
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,4.5
|
||||
parent: 1
|
||||
- uid: 14
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,1.5
|
||||
parent: 1
|
||||
- uid: 15
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 3.5,0.5
|
||||
parent: 1
|
||||
- uid: 16
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,1.5
|
||||
parent: 1
|
||||
- uid: 17
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 1.5,0.5
|
||||
parent: 1
|
||||
- uid: 27
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 0.5,2.5
|
||||
parent: 1
|
||||
- uid: 29
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 2.5,0.5
|
||||
parent: 1
|
||||
- uid: 31
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 4.5,3.5
|
||||
parent: 1
|
||||
- proto: CP14WindowWooden
|
||||
entities:
|
||||
- uid: 10
|
||||
components:
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 1.5,4.5
|
||||
parent: 1
|
||||
- uid: 13
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 3.5,4.5
|
||||
parent: 1
|
||||
- uid: 18
|
||||
components:
|
||||
- type: Transform
|
||||
pos: 2.5,4.5
|
||||
parent: 1
|
||||
- proto: CP14WoodenDoor
|
||||
entities:
|
||||
- uid: 20
|
||||
components:
|
||||
- type: Transform
|
||||
rot: -1.5707963267948966 rad
|
||||
pos: 4.5,2.5
|
||||
parent: 1
|
||||
...
|
||||
@@ -84229,7 +84229,7 @@ entities:
|
||||
- type: Transform
|
||||
pos: 31.23764,34.036747
|
||||
parent: 1
|
||||
- proto: WallPlastitaniumIndestructible
|
||||
- proto: CP14WallStoneIndestructable
|
||||
entities:
|
||||
- uid: 4
|
||||
components:
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
- type: entity
|
||||
parent: MarkerBase
|
||||
id: CP14SpawnerExpeditionLootCommon
|
||||
name: Expedition common loot spawner
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- sprite: _CP14/Objects/Materials/copper_bar.rsi
|
||||
state: bar_3
|
||||
- type: EntityTableSpawner
|
||||
table: !type:NestedSelector
|
||||
prob: 1.0
|
||||
tableId: CP14TableExpeditionLootCommon
|
||||
|
||||
- type: entityTable
|
||||
id: CP14TableExpeditionLootCommon
|
||||
table: !type:GroupSelector
|
||||
children:
|
||||
# Common
|
||||
- !type:GroupSelector
|
||||
weight: 75
|
||||
children:
|
||||
- id: CP14Wallet
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14SilverCoin1
|
||||
weight: 0.1
|
||||
- id: CP14CopperCoin
|
||||
weight: 0.1
|
||||
- id: CP14CopperCoin5
|
||||
weight: 0.5
|
||||
- id: CP14CopperCoin1
|
||||
weight: 1
|
||||
- id: CP14Wheat
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14DyeRed
|
||||
- id: CP14DyeYellow
|
||||
- id: CP14DyeBlue
|
||||
- id: CP14DyeGreen
|
||||
- id: CP14DyePurple
|
||||
- id: CP14DyeBlack
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14SeedWheat
|
||||
- id: CP14SeedPumpkin
|
||||
- id: CP14SeedCabbage
|
||||
- id: CP14SeedCucumber
|
||||
- id: CP14SeedTomato
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14BloodFlower
|
||||
- id: CP14AgaricMushroom
|
||||
- id: CP14WildSage
|
||||
- id: CP14QuartzShard
|
||||
- id: CP14BlueAmanita
|
||||
- id: CP14Dayflin
|
||||
- id: CP14CopperBar1
|
||||
- id: CP14IronBar1
|
||||
- id: CP14EnergyCrystalSmall
|
||||
- id: CP14Bucket
|
||||
- id: CP14OldLantern
|
||||
- id: CP14Scissors
|
||||
- id: CP14BaseSharpeningStone
|
||||
- id: CP14Rope
|
||||
weight: 2
|
||||
# Rare
|
||||
- !type:GroupSelector
|
||||
weight: 25
|
||||
children:
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14VialSmallBloodFlowerSap
|
||||
- id: CP14VialSmallAgaricMushroom
|
||||
- id: CP14VialSmallGroundQuartz
|
||||
- id: CP14VialSmallWildSage
|
||||
- id: CP14VialSmallBlueAmanita
|
||||
- id: CP14VialTinyChromiumSlime
|
||||
- id: CP14VialTinyLumiMushroom
|
||||
- !type:GroupSelector
|
||||
children:
|
||||
- id: CP14ChromiumSlime
|
||||
- id: CP14LumiMushroom
|
||||
- id: CP14SilverCoin5
|
||||
- id: CP14GoldBar1
|
||||
- id: CP14EnergyCrystalMedium
|
||||
|
||||
- type: entityTable
|
||||
id: CP14TableBureaucracy
|
||||
table: !type:GroupSelector
|
||||
children:
|
||||
# Common
|
||||
- !type:GroupSelector
|
||||
weight: 75
|
||||
children:
|
||||
- id: CP14Paper
|
||||
# Rare
|
||||
- !type:GroupSelector
|
||||
weight: 20
|
||||
children:
|
||||
- id: CP14PaperFolderBlue
|
||||
- id: CP14PaperFolderRed
|
||||
- id: CP14PenFeather
|
||||
# Very rare
|
||||
- !type:GroupSelector
|
||||
weight: 5
|
||||
children:
|
||||
- id: CP14Inkwell
|
||||
@@ -88,3 +88,4 @@
|
||||
volume: -8
|
||||
variation: 0.125
|
||||
- type: SoundWhileAlive
|
||||
- type: FloorOcclusion
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
type: StrippableBoundUserInterface
|
||||
- type: InventorySlots
|
||||
- type: ContainerContainer
|
||||
- type: FloorOcclusion
|
||||
- type: Inventory
|
||||
templateId: CP14Partial
|
||||
femaleDisplacements:
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
description: A small wallet, handy for storing coins.
|
||||
id: CP14Wallet
|
||||
parent: BaseStorageItem
|
||||
suffix: Empty
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: Sprite
|
||||
|
||||
@@ -32,6 +32,20 @@
|
||||
min: 2
|
||||
max: 3
|
||||
|
||||
- type: entity
|
||||
id: CP14WallStoneIndestructable
|
||||
name: dense rock
|
||||
parent: CP14BaseWall
|
||||
suffix: Undestructable
|
||||
description: An extremely durable stone. Your tools don't seem to be enough to break through it.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _CP14/Structures/Walls/Natural/cave_stone_strong.rsi
|
||||
- type: Icon
|
||||
sprite: _CP14/Structures/Walls/Natural/cave_stone_strong.rsi
|
||||
- type: IconSmooth
|
||||
base: wall
|
||||
|
||||
- type: entity
|
||||
id: CP14WallDirt
|
||||
name: earth wall
|
||||
|
||||
105
Resources/Prototypes/_CP14/Entities/subdimensionGenTEST.yml
Normal file
@@ -0,0 +1,105 @@
|
||||
- type: entity
|
||||
parent: BaseItem
|
||||
id: CP14BaseSubdimensionalKey
|
||||
abstract: true
|
||||
categories: [ ForkFiltered ]
|
||||
name: demiplan key
|
||||
description: The core that connects the real world to the demiplane. Use it to open a temporary passage to the other world.
|
||||
components:
|
||||
- type: Sprite
|
||||
drawdepth: Effects
|
||||
sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi
|
||||
layers:
|
||||
- state: core
|
||||
shader: unshaded
|
||||
|
||||
- type: entity
|
||||
id: CP14SubdimensionalKey
|
||||
parent: CP14BaseSubdimensionalKey
|
||||
components:
|
||||
- type: CP14DemiplaneGeneratorData
|
||||
- type: CP14DemiplaneRift
|
||||
- type: Sprite
|
||||
state: key1
|
||||
|
||||
- type: entity
|
||||
id: CP14DemiplanRiftCore
|
||||
categories: [ ForkFiltered ]
|
||||
name: demiplan rift core
|
||||
description: A subtle connection between the real world and the demiplane where the adventurers went. Sooner or later they will return from there.
|
||||
components:
|
||||
- type: CP14DemiplaneRift
|
||||
- type: Transform
|
||||
anchored: True
|
||||
- type: Clickable
|
||||
- type: Physics
|
||||
canCollide: false
|
||||
bodyType: Static
|
||||
- type: Sprite
|
||||
drawdepth: Effects
|
||||
sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi
|
||||
layers:
|
||||
- state: core
|
||||
shader: unshaded
|
||||
- state: pulse
|
||||
shader: unshaded
|
||||
- type: PointLight
|
||||
radius: 2
|
||||
energy: 2
|
||||
color: "#371c5c"
|
||||
netsync: false
|
||||
|
||||
- type: entity
|
||||
id: CP14DemiplaneTimedRadiusPassway
|
||||
parent: CP14DemiplanRiftCore
|
||||
name: pulsating demiplane rift
|
||||
description: This rift is gaining strength, and will trap all nearby creatures in a demiplane in a second!
|
||||
components:
|
||||
- type: CP14DemiplaneRift
|
||||
activeTeleport: false
|
||||
- type: CP14DemiplaneRadiusTimedPassway
|
||||
maxEntities: 3
|
||||
delay: 4
|
||||
- type: Sprite
|
||||
drawdepth: Effects
|
||||
sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift.rsi
|
||||
layers:
|
||||
- state: pulse
|
||||
shader: unshaded
|
||||
- type: PointLight
|
||||
radius: 8
|
||||
- type: SingularityDistortion
|
||||
falloffPower: 1.5
|
||||
intensity: 50
|
||||
|
||||
- type: entity
|
||||
id: CP14DemiplanePassway
|
||||
parent: CP14DemiplanRiftCore
|
||||
name: demiplane rift
|
||||
description: A gap in space that allows you to travel between world and demiplanes.
|
||||
components:
|
||||
- type: CP14DemiplaneRiftOpened
|
||||
- type: CP14DemiplaneRift
|
||||
activeTeleport: false
|
||||
- type: Sprite
|
||||
drawdepth: Effects
|
||||
sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift.rsi
|
||||
layers:
|
||||
- state: anom
|
||||
shader: unshaded
|
||||
- type: SingularityDistortion
|
||||
falloffPower: 1.5
|
||||
intensity: 50
|
||||
|
||||
- type: entity
|
||||
parent: MarkerBase
|
||||
id: CP14DemiplaneEntryPointMarker
|
||||
name: demiplane entry point
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: green
|
||||
- sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift.rsi
|
||||
state: pulse
|
||||
- type: CP14DemiplaneRift
|
||||
@@ -0,0 +1,159 @@
|
||||
- type: cp14DemiplaneLocation
|
||||
id: T1Caves
|
||||
locationConfig: CP14ExpeditionCaves
|
||||
components:
|
||||
- type: CP14WeatherController
|
||||
entries:
|
||||
- visuals: CP14Mist
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionCaves
|
||||
layers:
|
||||
# Masks (from center to border!)
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionCavesFloorMaskBorder
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionCavesFloorMaskStone
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionCavesFloorMaskAir
|
||||
# Exterior rooms
|
||||
#here
|
||||
# Biome Spawner fills (from border to center!) order is very important! For inexplicable reasons, only a certain sequence works!
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionCavesFillBorder
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionCavesFillAir
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionCavesFillCave
|
||||
# Ore and resources
|
||||
- !type:OreDunGen
|
||||
replacement: CP14WallStone
|
||||
entity: CP14WallStoneGoldOre
|
||||
count: 10
|
||||
minGroupSize: 10
|
||||
maxGroupSize: 15
|
||||
- !type:OreDunGen
|
||||
replacement: CP14WallStone
|
||||
entity: CP14WallStoneIronOre
|
||||
count: 10
|
||||
minGroupSize: 10
|
||||
maxGroupSize: 15
|
||||
- !type:OreDunGen
|
||||
replacement: CP14WallStone
|
||||
entity: CP14WallStoneCopperOre
|
||||
count: 10
|
||||
minGroupSize: 10
|
||||
maxGroupSize: 15
|
||||
# Mobs
|
||||
- !type:MobsDunGen
|
||||
minCount: 5
|
||||
maxCount: 10
|
||||
groups:
|
||||
- id: CP14SpawnMobUndeadZombie
|
||||
amount: 1
|
||||
# Enter and Exit
|
||||
- !type:MobsDunGen
|
||||
minCount: 1
|
||||
maxCount: 2
|
||||
groups:
|
||||
- id: CP14DemiplaneEntryPointMarker
|
||||
amount: 1
|
||||
- !type:MobsDunGen
|
||||
minCount: 2
|
||||
maxCount: 2
|
||||
groups:
|
||||
- id: CP14DemiplanePassway
|
||||
amount: 1
|
||||
# Loot
|
||||
- !type:EntityTableDunGen
|
||||
minCount: 10
|
||||
maxCount: 25
|
||||
table: !type:NestedSelector
|
||||
tableId: CP14TableExpeditionLootCommon
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionCavesFloorMaskAir
|
||||
layers:
|
||||
- !type:NoiseDistanceDunGen
|
||||
size: 80, 80
|
||||
distanceConfig: !type:DunGenEuclideanSquaredDistance
|
||||
blendWeight: 0.5
|
||||
layers:
|
||||
- tile: CP14FloorGrass
|
||||
threshold: 0.50
|
||||
noise:
|
||||
frequency: 0.030
|
||||
noiseType: OpenSimplex2
|
||||
fractalType: FBm
|
||||
octaves: 5
|
||||
lacunarity: 2
|
||||
gain: 0.5
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionCavesFloorMaskStone
|
||||
layers:
|
||||
- !type:NoiseDistanceDunGen
|
||||
size: 120, 120
|
||||
distanceConfig: !type:DunGenEuclideanSquaredDistance
|
||||
blendWeight: 0.9
|
||||
layers:
|
||||
- tile: CP14FloorSand
|
||||
threshold: 0.50
|
||||
noise:
|
||||
frequency: 0.010
|
||||
noiseType: OpenSimplex2
|
||||
fractalType: FBm
|
||||
octaves: 5
|
||||
lacunarity: 2
|
||||
gain: 0.5
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionCavesFloorMaskBorder
|
||||
layers:
|
||||
- !type:NoiseDistanceDunGen
|
||||
size: 130, 130
|
||||
distanceConfig: !type:DunGenEuclideanSquaredDistance
|
||||
blendWeight: 1
|
||||
layers:
|
||||
- tile: CP14FloorBase
|
||||
threshold: 0.50
|
||||
noise:
|
||||
frequency: 0.010
|
||||
noiseType: OpenSimplex2
|
||||
fractalType: FBm
|
||||
octaves: 5
|
||||
lacunarity: 2
|
||||
gain: 0.5
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionCavesFillAir
|
||||
reserveTiles: true
|
||||
data:
|
||||
entities:
|
||||
Fill: CP14BiomeSpawnerCaveEmpty
|
||||
layers:
|
||||
- !type:FillGridDunGen
|
||||
allowedTiles:
|
||||
- CP14FloorGrass
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionCavesFillCave
|
||||
reserveTiles: true
|
||||
data:
|
||||
entities:
|
||||
Fill: CP14BiomeSpawnerCave
|
||||
layers:
|
||||
- !type:FillGridDunGen
|
||||
allowedTiles:
|
||||
- CP14FloorSand
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionCavesFillBorder
|
||||
reserveTiles: true
|
||||
data:
|
||||
entities:
|
||||
Fill: CP14WallStoneIndestructable
|
||||
layers:
|
||||
- !type:FillGridDunGen
|
||||
allowedTiles:
|
||||
- CP14FloorBase
|
||||
@@ -0,0 +1,179 @@
|
||||
- type: cp14DemiplaneLocation
|
||||
id: T1GrasslandIsland
|
||||
locationConfig: CP14ExpeditionGrasslandIsland
|
||||
components:
|
||||
- type: MapLight
|
||||
ambientLightColor: "#BFEEFFFF"
|
||||
- type: CP14MapFloorOccluder
|
||||
- type: Parallax
|
||||
parallax: CP14Ocean
|
||||
- type: CP14WeatherController
|
||||
entries:
|
||||
- visuals: CP14Rain
|
||||
- visuals: CP14Storm
|
||||
- visuals: CP14Mist
|
||||
- type: CP14DayCycle
|
||||
timeEntries:
|
||||
- duration: 80
|
||||
color: '#754A4AFF'
|
||||
- duration: 80
|
||||
color: '#E0BA87FF'
|
||||
- duration: 80
|
||||
color: '#BFEEFFFF'
|
||||
- period: Night
|
||||
duration: 80
|
||||
color: '#385163FF'
|
||||
- period: Night
|
||||
duration: 80
|
||||
color: '#060D12FF'
|
||||
- period: Night
|
||||
duration: 80
|
||||
color: '#000000FF'
|
||||
- period: Night
|
||||
duration: 80
|
||||
color: '#000000FF'
|
||||
- duration: 80
|
||||
color: '#120906FF'
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionGrasslandIsland
|
||||
layers:
|
||||
# Masks (from center to border!)
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionGrasslandIslandFloorMaskSand
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionGrasslandIslandFloorMaskGrass
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionGrasslandIslandFloorMaskStone
|
||||
# Exterior rooms
|
||||
- !type:EntityTableDunGen
|
||||
minCount: 1
|
||||
maxCount: 2
|
||||
table:
|
||||
id: CP14GrasslandIslandExteriorRoomSpawner
|
||||
# Biome Spawner fills (from border to center!) order is very important! For inexplicable reasons, only a certain sequence works!
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionGrasslandIslandFillGrassland
|
||||
- !type:PrototypeDunGen
|
||||
proto: CP14ExpeditionGrasslandIslandFillCave
|
||||
# Ore and resources
|
||||
- !type:OreDunGen
|
||||
replacement: CP14WallStone
|
||||
entity: CP14WallStoneGoldOre
|
||||
count: 10
|
||||
minGroupSize: 10
|
||||
maxGroupSize: 15
|
||||
- !type:OreDunGen
|
||||
replacement: CP14WallStone
|
||||
entity: CP14WallStoneIronOre
|
||||
count: 10
|
||||
minGroupSize: 10
|
||||
maxGroupSize: 15
|
||||
- !type:OreDunGen
|
||||
replacement: CP14WallStone
|
||||
entity: CP14WallStoneCopperOre
|
||||
count: 10
|
||||
minGroupSize: 10
|
||||
maxGroupSize: 15
|
||||
# Mobs
|
||||
- !type:MobsDunGen
|
||||
minCount: 2
|
||||
maxCount: 5
|
||||
groups:
|
||||
- id: CP14SpawnMobDinoYumkaraptor
|
||||
amount: 1
|
||||
# Enter and Exit
|
||||
- !type:MobsDunGen
|
||||
minCount: 1
|
||||
maxCount: 2
|
||||
groups:
|
||||
- id: CP14DemiplaneEntryPointMarker
|
||||
amount: 1
|
||||
- !type:MobsDunGen
|
||||
minCount: 2
|
||||
maxCount: 2
|
||||
groups:
|
||||
- id: CP14DemiplanePassway
|
||||
amount: 1
|
||||
# Loot
|
||||
- !type:EntityTableDunGen
|
||||
minCount: 5
|
||||
maxCount: 20
|
||||
table: !type:NestedSelector
|
||||
tableId: CP14TableExpeditionLootCommon
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionGrasslandIslandFloorMaskStone
|
||||
layers:
|
||||
- !type:NoiseDistanceDunGen
|
||||
size: 80, 80
|
||||
distanceConfig: !type:DunGenEuclideanSquaredDistance
|
||||
blendWeight: 0.5
|
||||
layers:
|
||||
- tile: CP14FloorBase
|
||||
threshold: 0.50
|
||||
noise:
|
||||
frequency: 0.010
|
||||
noiseType: OpenSimplex2
|
||||
fractalType: FBm
|
||||
octaves: 5
|
||||
lacunarity: 2
|
||||
gain: 0.5
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionGrasslandIslandFloorMaskGrass
|
||||
layers:
|
||||
- !type:NoiseDistanceDunGen
|
||||
size: 120, 120
|
||||
distanceConfig: !type:DunGenEuclideanSquaredDistance
|
||||
blendWeight: 0.6
|
||||
layers:
|
||||
- tile: CP14FloorGrass
|
||||
threshold: 0.50
|
||||
noise:
|
||||
frequency: 0.010
|
||||
noiseType: OpenSimplex2
|
||||
fractalType: FBm
|
||||
octaves: 5
|
||||
lacunarity: 2
|
||||
gain: 0.5
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionGrasslandIslandFloorMaskSand
|
||||
layers:
|
||||
- !type:NoiseDistanceDunGen
|
||||
size: 130, 130
|
||||
distanceConfig: !type:DunGenEuclideanSquaredDistance
|
||||
blendWeight: 0.7
|
||||
layers:
|
||||
- tile: CP14FloorSand
|
||||
threshold: 0.50
|
||||
noise:
|
||||
frequency: 0.010
|
||||
noiseType: OpenSimplex2
|
||||
fractalType: FBm
|
||||
octaves: 5
|
||||
lacunarity: 2
|
||||
gain: 0.5
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionGrasslandIslandFillGrassland
|
||||
reserveTiles: true
|
||||
data:
|
||||
entities:
|
||||
Fill: CP14BiomeSpawnerGrassland
|
||||
layers:
|
||||
- !type:FillGridDunGen
|
||||
allowedTiles:
|
||||
- CP14FloorGrass
|
||||
|
||||
- type: dungeonConfig
|
||||
id: CP14ExpeditionGrasslandIslandFillCave
|
||||
reserveTiles: true
|
||||
data:
|
||||
entities:
|
||||
Fill: CP14BiomeSpawnerCave
|
||||
layers:
|
||||
- !type:FillGridDunGen
|
||||
allowedTiles:
|
||||
- CP14FloorBase
|
||||
@@ -0,0 +1,23 @@
|
||||
- type: Tag
|
||||
id: CP14GrasslandIsland
|
||||
|
||||
- type: entity
|
||||
id: CP14GrasslandIslandExteriorRoomSpawner
|
||||
categories: [ ForkFiltered ]
|
||||
parent: BaseRoomMarker
|
||||
name: Grassland island exterior room spawner
|
||||
components:
|
||||
- type: RoomFill
|
||||
size: 11,5
|
||||
roomWhitelist:
|
||||
tags:
|
||||
- CP14GrasslandIsland
|
||||
|
||||
# 11x5
|
||||
- type: dungeonRoom
|
||||
id: CP14GrasslandIslandExterior_11x5_a
|
||||
size: 11,5
|
||||
atlas: /Maps/_CP14/Dungeon/grassland_island_exterior.yml
|
||||
offset: 0,0
|
||||
tags:
|
||||
- CP14GrasslandIsland
|
||||
@@ -3,7 +3,7 @@
|
||||
layers:
|
||||
- !type:BiomeTileLayer
|
||||
threshold: -1.0
|
||||
tile: CP14FloorBase
|
||||
tile: CP14FloorBase
|
||||
|
||||
- type: biomeTemplate
|
||||
id: CP14CavesFloor
|
||||
@@ -46,20 +46,6 @@
|
||||
layers:
|
||||
- !type:BiomeMetaLayer
|
||||
template: CP14CavesFloor
|
||||
# Lakes start
|
||||
- !type:BiomeEntityLayer
|
||||
allowedTiles:
|
||||
- CP14FloorBase
|
||||
threshold: 0.8
|
||||
noise:
|
||||
seed: 14
|
||||
noiseType: OpenSimplex2
|
||||
fractalType: FBm
|
||||
frequency: 0.01
|
||||
domainWarpType: OpenSimplex2
|
||||
domainWarpAmp: 150
|
||||
entities:
|
||||
- CP14FloorWater
|
||||
#Walls
|
||||
- !type:BiomeEntityLayer
|
||||
threshold: -0.75
|
||||
@@ -75,37 +61,17 @@
|
||||
- CP14FloorBase
|
||||
entities:
|
||||
- CP14WallStone
|
||||
#Ores
|
||||
# Lakes
|
||||
- !type:BiomeEntityLayer
|
||||
threshold: 0.7
|
||||
noise:
|
||||
seed: 10
|
||||
noiseType: OpenSimplex2
|
||||
fractalType: FBm
|
||||
frequency: 3
|
||||
allowedTiles:
|
||||
- CP14FloorBase
|
||||
entities:
|
||||
- CP14WallStoneGoldOre
|
||||
- !type:BiomeEntityLayer
|
||||
threshold: 0.6
|
||||
threshold: 0.8
|
||||
noise:
|
||||
seed: 15
|
||||
seed: 14
|
||||
noiseType: OpenSimplex2
|
||||
fractalType: FBm
|
||||
frequency: 3
|
||||
allowedTiles:
|
||||
- CP14FloorBase
|
||||
frequency: 0.01
|
||||
domainWarpType: OpenSimplex2
|
||||
domainWarpAmp: 150
|
||||
entities:
|
||||
- CP14WallStoneIronOre
|
||||
- !type:BiomeEntityLayer
|
||||
threshold: 0.5
|
||||
noise:
|
||||
seed: 20
|
||||
noiseType: OpenSimplex2
|
||||
fractalType: FBm
|
||||
frequency: 3
|
||||
allowedTiles:
|
||||
- CP14FloorBase
|
||||
entities:
|
||||
- CP14WallStoneCopperOre
|
||||
- CP14FloorWater
|
||||
@@ -314,49 +314,6 @@
|
||||
seed: 14
|
||||
frequency: 0.02
|
||||
fractalType: None
|
||||
# River start
|
||||
- !type:BiomeTileLayer
|
||||
tile: CP14FloorDirt
|
||||
threshold: 0.93
|
||||
noise:
|
||||
seed: 3
|
||||
noiseType: OpenSimplex2
|
||||
frequency: 0.003
|
||||
lacunarity: 1.50
|
||||
gain: 0.12
|
||||
fractalType: Ridged
|
||||
octaves: 1
|
||||
- !type:BiomeEntityLayer
|
||||
allowedTiles:
|
||||
- CP14FloorDirt
|
||||
- CP14FloorGrass
|
||||
threshold: 0.91
|
||||
noise:
|
||||
seed: 3
|
||||
noiseType: OpenSimplex2
|
||||
frequency: 0.003
|
||||
lacunarity: 1.50
|
||||
gain: 0.12
|
||||
fractalType: Ridged
|
||||
octaves: 1
|
||||
entities:
|
||||
- CP14RandomSpawnerGatherAgaricShroom
|
||||
- !type:BiomeEntityLayer
|
||||
allowedTiles:
|
||||
- CP14FloorDirt
|
||||
- CP14FloorSand
|
||||
threshold: 0.93
|
||||
noise:
|
||||
seed: 3
|
||||
noiseType: OpenSimplex2
|
||||
frequency: 0.003
|
||||
lacunarity: 1.50
|
||||
gain: 0.12
|
||||
fractalType: Ridged
|
||||
octaves: 1
|
||||
entities:
|
||||
- CP14FloorWater
|
||||
# River end
|
||||
# Lakes start
|
||||
- !type:BiomeTileLayer
|
||||
tile: CP14FloorSand
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
- type: soundCollection
|
||||
id: CP14LobbyMusic
|
||||
files:
|
||||
- /Audio/_CP14/Lobby/crystal.ogg
|
||||
- /Audio/_CP14/Lobby/eldermourne.ogg
|
||||
- /Audio/_CP14/Lobby/arcane_winds.ogg
|
||||
14
Resources/Prototypes/_CP14/SoundCollections/music.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
- type: soundCollection
|
||||
id: CP14LobbyMusic
|
||||
files:
|
||||
- /Audio/_CP14/Lobby/crystal.ogg
|
||||
- /Audio/_CP14/Lobby/eldermourne.ogg
|
||||
- /Audio/_CP14/Lobby/arcane_winds.ogg
|
||||
|
||||
- type: soundCollection
|
||||
id: CP14DemiplaneIntro
|
||||
files:
|
||||
- /Audio/_CP14/Ambience/Demiplane/intro1.ogg
|
||||
- /Audio/_CP14/Ambience/Demiplane/intro2.ogg
|
||||
- /Audio/_CP14/Ambience/Demiplane/intro3.ogg
|
||||
- /Audio/_CP14/Ambience/Demiplane/intro4.ogg
|
||||
@@ -1,12 +1,12 @@
|
||||
# 4 Priority - Special
|
||||
|
||||
- type: ambientMusic
|
||||
id: CP14Ritual
|
||||
id: CP14Magic
|
||||
sound:
|
||||
params:
|
||||
volume: -12
|
||||
collection: CP14AmbienceMagic
|
||||
rules: NearRitual
|
||||
rules: NearMagic
|
||||
priority: 4
|
||||
|
||||
# 3 Priority - Departments
|
||||
@@ -76,7 +76,7 @@
|
||||
- !type:AlwaysTrueRule
|
||||
|
||||
- type: rules
|
||||
id: NearRitual
|
||||
id: NearMagic
|
||||
rules:
|
||||
- !type:NearbyEntitiesRule
|
||||
count: 1
|
||||
@@ -84,6 +84,7 @@
|
||||
components:
|
||||
- CP14MagicRitualPhase
|
||||
- CP14MagicRitual
|
||||
- CP14DemiplanPassway
|
||||
range: 6
|
||||
|
||||
- type: rules
|
||||
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC0-1.0",
|
||||
"copyright": "Created by TheShuEd (github) for ss14",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 48
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "anom",
|
||||
"delays": [
|
||||
[
|
||||
0.25625,
|
||||
0.25625,
|
||||
0.25625
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pulse",
|
||||
"delays": [
|
||||
[
|
||||
0.15625,
|
||||
0.15625,
|
||||
0.15625,
|
||||
0.15625,
|
||||
0.15625,
|
||||
0.15625
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 252 B |
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC0-1.0",
|
||||
"copyright": "Created by TheShuEd (github) for ss14",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "core"
|
||||
},
|
||||
{
|
||||
"name": "pulse",
|
||||
"delays": [
|
||||
[
|
||||
0.15625,
|
||||
0.15625,
|
||||
0.15625,
|
||||
0.15625
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 371 B |
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CLA",
|
||||
"copyright": "by TheShuEd (discord)",
|
||||
"size": {
|
||||
"x": 48,
|
||||
"y": 48
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "rift"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/_CP14/Structures/Dungeon/rift.rsi/rift.png
Normal file
|
After Width: | Height: | Size: 552 B |
|
After Width: | Height: | Size: 4.3 KiB |
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 64
|
||||
},
|
||||
"license": "CLA",
|
||||
"copyright": "Created by TheShuEd (Discord) for CrystallPunk14",
|
||||
"states": [
|
||||
{
|
||||
"name": "wall0",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wall1",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wall2",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wall3",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wall4",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wall5",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wall6",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "wall7",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "full"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 2.8 KiB |