Demiplanes redesign again (#1616)

* global demi refactor

* rebalance, smaller demiplanes

* remove outdated connections

* audio design + room coords fix

* Update CP14Rooms.cs

* Update wastelands.yml

* hotfixes

* Update CP14SpellThrowFromUser.cs

* Update sky_lightning.yml
This commit is contained in:
Red
2025-08-05 12:15:24 +03:00
committed by GitHub
parent 4f431f9b70
commit b60ceb38ca
50 changed files with 1523 additions and 4294 deletions

View File

@@ -1,10 +1,12 @@
using System.Threading;
using Content.Server._CP14.Procedural.Demiplane;
using Content.Server._CP14.Procedural.GlobalWorld.Components;
using Content.Server.Procedural;
using Content.Server.Station.Components;
using Content.Server.Station.Events;
using Content.Server.Station.Systems;
using Content.Shared._CP14.Procedural.Prototypes;
using Content.Shared.Procedural;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.CPUJob.JobQueues;
using Robust.Shared.CPUJob.JobQueues.Queues;
using Robust.Shared.Map;
@@ -20,6 +22,10 @@ public sealed class CP14LocationGenerationSystem : EntitySystem
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly DungeonSystem _dungeon = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly StationSystem _station = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
private ISawmill _sawmill = null!;
private const double JobMaxTime = 0.002;
private readonly JobQueue _expeditionQueue = new();
@@ -29,8 +35,31 @@ public sealed class CP14LocationGenerationSystem : EntitySystem
{
base.Initialize();
SubscribeLocalEvent<CP14ActiveJobGenerationComponent, ComponentShutdown>(OnGenerationShutdown);
_sawmill = _logManager.GetSawmill("cp14_procedural");
SubscribeLocalEvent<CP14ActiveJobGenerationComponent, ComponentShutdown>(OnGenerationShutdown);
SubscribeLocalEvent<CP14StationProceduralLocationComponent, StationPostInitEvent>(OnStationPostInit);
}
private void OnStationPostInit(Entity<CP14StationProceduralLocationComponent> ent, ref StationPostInitEvent args)
{
if (!TryComp<StationDataComponent>(ent, out var stationData))
{
_sawmill.Error($"Station {ent} does not have a StationDataComponent, cannot generate location on it.");
return;
}
var largestStationGrid = _station.GetLargestGrid(stationData);
if (largestStationGrid is null)
{
_sawmill.Error($"No grid found for station {ent} to generate location on.");
return;
}
var mapId = _transform.GetMapId(largestStationGrid.Value);
GenerateLocation(largestStationGrid.Value, mapId, ent.Comp.Location, ent.Comp.Modifiers);
}
public override void Update(float frameTime)
@@ -44,8 +73,8 @@ public sealed class CP14LocationGenerationSystem : EntitySystem
case JobStatus.Finished:
if (job.JobName is not null)
{
var ev = new CP14LocationGeneratedEvent(job.JobName);
RaiseLocalEvent(ev);
var ev = new CP14LocationGeneratedEvent();
RaiseLocalEvent(job.MapUid, ev);
}
RemComp<CP14ActiveJobGenerationComponent>(job.MapUid);
@@ -100,10 +129,3 @@ public sealed class CP14LocationGenerationSystem : EntitySystem
}
}
}
[PublicAPI]
public sealed class CP14LocationGeneratedEvent(string jobName) : EntityEventArgs
{
public string JobName = jobName;
}

View File

@@ -1,13 +1,13 @@
using Content.Shared._CP14.Procedural.Prototypes;
using Robust.Shared.Prototypes;
namespace Content.Server._CP14.Procedural.GlobalWorld.Components;
namespace Content.Server._CP14.Procedural;
/// <summary>
/// Generates the surrounding procedural world on the game map, surrounding the mapped settlement.
/// </summary>
[RegisterComponent, Access(typeof(CP14GlobalWorldSystem))]
public sealed partial class CP14StationGlobalWorldIntegrationComponent : Component
[RegisterComponent, Access(typeof(CP14LocationGenerationSystem))]
public sealed partial class CP14StationProceduralLocationComponent : Component
{
[DataField(required: true)]
public ProtoId<CP14ProceduralLocationPrototype> Location;

View File

@@ -1,118 +1,120 @@
using System.Diagnostics;
using System.Linq;
using Content.Server._CP14.Procedural.GlobalWorld.Components;
using Content.Server.Station.Components;
using Content.Server._CP14.Procedural.Demiplane.Components;
using Content.Shared._CP14.Procedural.Prototypes;
using Content.Shared.Interaction;
using Content.Shared.Teleportation.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Timing;
namespace Content.Server._CP14.Procedural.GlobalWorld;
namespace Content.Server._CP14.Procedural.Demiplane;
public sealed partial class CP14GlobalWorldSystem
public sealed class CP14DemiplaneSystem : EntitySystem
{
private void GenerateGlobalWorldMap(Entity<CP14StationGlobalWorldComponent> ent)
[Dependency] private readonly SharedMapSystem _map = default!;
[Dependency] private readonly CP14LocationGenerationSystem _generation = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly MetaDataSystem _meta = default!;
[Dependency] private readonly LinkedEntitySystem _link = default!;
[Dependency] private readonly IGameTiming _timing = default!;
public override void Initialize()
{
ent.Comp.Nodes.Clear();
ent.Comp.Edges.Clear();
base.Initialize();
//For first - check station integration, and put station into (0,0) global map position
if (TryComp<CP14StationGlobalWorldIntegrationComponent>(ent, out var integration) &&
TryComp<StationDataComponent>(ent, out var stationData))
SubscribeLocalEvent<CP14DemiplaneRiftComponent, InteractHandEvent>(OnRiftInteracted);
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var query = EntityQueryEnumerator<CP14DemiplaneRiftComponent>();
while (query.MoveNext(out var uid, out var demiplaneRift))
{
var largestStationGrid = _station.GetLargestGrid(stationData);
Debug.Assert(largestStationGrid is not null);
var mapId = _transform.GetMapId(largestStationGrid.Value);
var zeroNode =
new CP14GlobalWorldNode
{
MapUid = mapId,
LocationConfig = integration.Location,
Modifiers = integration.Modifiers,
Level = 0,
};
GenerateNodeData(zeroNode);
ent.Comp.Nodes.Add(
Vector2i.Zero,
zeroNode
);
}
else
{
var zeroNode = new CP14GlobalWorldNode();
GenerateNodeData(zeroNode);
ent.Comp.Nodes.Add(Vector2i.Zero, zeroNode);
}
//Generate nodes with random data until limits
while (ent.Comp.Nodes.Count < ent.Comp.LocationCount + 1)
{
// Get a random existing node
var randomNode = _random.Pick(ent.Comp.Nodes);
var randomNodePosition = randomNode.Key;
// Find a random empty adjacent position
var directions = new[] { new Vector2i(1, 0), new Vector2i(-1, 0), new Vector2i(0, 1), new Vector2i(0, -1) };
var emptyPositions = directions
.Select(dir => randomNodePosition + dir)
.Where(pos => !ent.Comp.Nodes.ContainsKey(pos))
.ToList();
if (emptyPositions.Count == 0)
if (demiplaneRift.ScanningTargetMap is null)
continue;
var newPosition = emptyPositions[Random.Shared.Next(emptyPositions.Count)];
if (_timing.CurTime < demiplaneRift.NextScanTime)
continue;
// Add the new node and connect it with an edge
var newNode = new CP14GlobalWorldNode
{
Level = Math.Abs(newPosition.X) + Math.Abs(newPosition.Y),
};
GenerateNodeData(newNode);
ent.Comp.Nodes.Add(newPosition, newNode);
ent.Comp.Edges.Add((randomNodePosition, newPosition));
demiplaneRift.NextScanTime = _timing.CurTime + TimeSpan.FromSeconds(5);
//Add connections to each other
if (_proto.TryIndex(newNode.LocationConfig, out var indexedNewNodeLocation) && _proto.TryIndex(randomNode.Value.LocationConfig, out var indexedRandomNodeLocation))
var targetQuery = EntityQueryEnumerator<CP14DemiplaneEnterPointComponent>();
while (targetQuery.MoveNext(out var enterUid, out var enterComp))
{
newNode.Modifiers.Add(indexedNewNodeLocation.Connection);
randomNode.Value.Modifiers.Add(indexedRandomNodeLocation.Connection);
if (Transform(enterUid).MapUid != demiplaneRift.ScanningTargetMap)
continue;
//Remove awaiting
QueueDel(demiplaneRift.AwaitingEntity);
//Start connection
var portal1 = SpawnAtPosition(demiplaneRift.PortalProto, Transform(enterUid).Coordinates);
var portal2 = SpawnAtPosition(demiplaneRift.PortalProto, Transform(uid).Coordinates);
_link.TryLink(portal1, portal2, true);
//Delete self
QueueDel(uid);
QueueDel(enterUid);
return;
}
}
}
private void GenerateNodeData(CP14GlobalWorldNode node,
bool overrideLocation = false,
bool clearOldModifiers = false)
private void OnRiftInteracted(Entity<CP14DemiplaneRiftComponent> ent, ref InteractHandEvent args)
{
if (node.LocationConfig is null || overrideLocation)
if (HasComp<CP14DemiplaneBlockInteractionsComponent>(args.User))
return;
if (!ent.Comp.CanCreate)
return;
var nextLevel = 1;
var originMap = Transform(ent).MapUid;
if (TryComp<CP14DemiplaneMapComponent>(originMap, out var demiplane))
{
var location = SelectLocation(node.Level);
node.LocationConfig ??= location;
nextLevel = demiplane.Level + 1;
}
if (!_proto.TryIndex(node.LocationConfig, out var indexedLocation))
throw new Exception($"No location config found for node at level {node.Level}!");
_map.CreateMap(out var mapId, runMapInit: false);
var mapUid = _map.GetMap(mapId);
EnsureComp<CP14DemiplaneMapComponent>(mapUid).Level = nextLevel;
var limits = new Dictionary<ProtoId<CP14ProceduralModifierCategoryPrototype>, float>
{
{ "Danger", Math.Max(node.Level * 0.2f, 0.5f) },
{ "Danger", Math.Max(nextLevel * 0.2f, 0.5f) },
{ "GhostRoleDanger", 1f },
{ "Reward", Math.Max(node.Level * 0.3f, 0.5f) },
{ "Ore", Math.Max(node.Level * 0.5f, 1f) },
{ "Reward", Math.Max(nextLevel * 0.3f, 0.5f) },
{ "Ore", Math.Max(nextLevel * 0.5f, 1f) },
{ "Fun", 1f },
{ "Weather", 1f },
{ "MapLight", 1f },
{ "Passage", 1f },
};
var mods = SelectModifiers(node.Level, indexedLocation, limits);
if (clearOldModifiers)
node.Modifiers.Clear();
foreach (var mod in mods)
{
node.Modifiers.Add(mod);
}
var nextLocation = SelectLocation(nextLevel);
var nextModifiers = SelectModifiers(nextLevel, nextLocation, limits);
nextModifiers.Add("CP14DemiplanEnterRoom"); //HARDCODE, BOO
_meta.SetEntityName(mapUid, $"Demi: [{nextLevel}] - {nextLocation.LocationConfig.Id}");
_generation.GenerateLocation(
mapUid,
mapId,
nextLocation,
nextModifiers);
var awaiting = SpawnAtPosition(ent.Comp.AwaitingProto, Transform(ent).Coordinates);
ent.Comp.AwaitingEntity = awaiting;
ent.Comp.ScanningTargetMap = mapUid;
ent.Comp.CanCreate = false;
}
/// <summary>
@@ -171,12 +173,12 @@ public sealed partial class CP14GlobalWorldSystem
/// <summary>
/// Returns a set of modifiers under the specified difficulty level that are appropriate for the specified location
/// </summary>
public List<CP14ProceduralModifierPrototype> SelectModifiers(
public List<ProtoId<CP14ProceduralModifierPrototype>> SelectModifiers(
int level,
CP14ProceduralLocationPrototype location,
Dictionary<ProtoId<CP14ProceduralModifierCategoryPrototype>, float> modifierLimits)
{
List<CP14ProceduralModifierPrototype> selectedModifiers = new();
List<ProtoId<CP14ProceduralModifierPrototype>> selectedModifiers = new();
//Modifier generation
Dictionary<CP14ProceduralModifierPrototype, float> suitableModifiersWeights = new();
@@ -305,3 +307,7 @@ public sealed partial class CP14GlobalWorldSystem
throw new InvalidOperationException($"Invalid weighted pick in CP14DemiplanSystem.Generation!");
}
}
public sealed class CP14LocationGeneratedEvent : EntityEventArgs
{
}

View File

@@ -0,0 +1,9 @@
namespace Content.Server._CP14.Procedural.Demiplane.Components;
/// <summary>
///
/// </summary>
[RegisterComponent, Access(typeof(CP14DemiplaneSystem))]
public sealed partial class CP14DemiplaneBlockInteractionsComponent : Component
{
}

View File

@@ -0,0 +1,9 @@
namespace Content.Server._CP14.Procedural.Demiplane.Components;
/// <summary>
///
/// </summary>
[RegisterComponent, Access(typeof(CP14DemiplaneSystem))]
public sealed partial class CP14DemiplaneEnterPointComponent : Component
{
}

View File

@@ -0,0 +1,12 @@
namespace Content.Server._CP14.Procedural.Demiplane.Components;
/// <summary>
///
/// </summary>
[RegisterComponent, Access(typeof(CP14DemiplaneSystem))]
public sealed partial class CP14DemiplaneMapComponent : Component
{
[DataField]
public int Level = 0;
}

View File

@@ -0,0 +1,31 @@
using Robust.Shared.Prototypes;
namespace Content.Server._CP14.Procedural.Demiplane.Components;
/// <summary>
/// Creates a new map of the next level of the demiplane and connects to it via a portal.
/// </summary>
[RegisterComponent, Access(typeof(CP14DemiplaneSystem))]
public sealed partial class CP14DemiplaneRiftComponent : Component
{
/// <summary>
/// Blocks the creation of a new demiplane map, after the first one is created.
/// </summary>
[DataField]
public bool CanCreate = true;
[DataField]
public EntProtoId AwaitingProto = "CP14DemiplaneRiftAwaiting";
[DataField]
public EntProtoId PortalProto = "CP14DemiplaneRiftPortal";
[DataField]
public EntityUid? AwaitingEntity;
[DataField]
public EntityUid? ScanningTargetMap;
[DataField]
public TimeSpan NextScanTime = TimeSpan.Zero;
}

View File

@@ -89,7 +89,7 @@ public sealed partial class DungeonJob
{
for (int y = 0; y < room.Size.Y; y++)
{
var pos = selectedTile + new Vector2i(x, y);
var pos = selectedTile + new Vector2i(x, y) - new Vector2i(room.Size.X/2,room.Size.Y/2);
if (reservedTiles.Contains(pos))
{
conflict = true;
@@ -103,7 +103,7 @@ public sealed partial class DungeonJob
if (conflict)
continue;
_dungeon.SpawnRoom(_gridUid, _grid, selectedTile, room, random, clearExisting: true, rotation: true);
_dungeon.SpawnRoom(_gridUid, _grid, selectedTile - new Vector2i(room.Size.X/2,room.Size.Y/2), room, random, clearExisting: true, rotation: true);
foreach (var pos in roomBounds)
{

View File

@@ -1,148 +0,0 @@
using Content.Server._CP14.Procedural.GlobalWorld.Components;
using Content.Server.Shuttles.Systems;
using Content.Server.Station.Events;
using Content.Server.Station.Systems;
using Content.Shared.Teleportation.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Server._CP14.Procedural.GlobalWorld;
public sealed partial class CP14GlobalWorldSystem : EntitySystem
{
[Dependency] private readonly ShuttleSystem _shuttles = default!;
[Dependency] private readonly StationSystem _station = default!;
[Dependency] private readonly ILogManager _logManager = default!;
[Dependency] private readonly SharedMapSystem _map = default!;
[Dependency] private readonly CP14LocationGenerationSystem _generation = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly MetaDataSystem _meta = default!;
[Dependency] private readonly EntityLookupSystem _lookup = default!;
[Dependency] private readonly LinkedEntitySystem _link = default!;
private ISawmill _sawmill = default!;
public override void Initialize()
{
base.Initialize();
_sawmill = _logManager.GetSawmill("cp14_global_world");
SubscribeLocalEvent<CP14StationGlobalWorldComponent, StationPostInitEvent>(OnIntegratedPostInit);
SubscribeLocalEvent<CP14LocationGeneratedEvent>(OnLocationGenerated);
SubscribeLocalEvent<CP14StationGlobalWorldComponent, CP14GlobalWorldGeneratedEvent>(OnGlobalWorldGenerated);
}
private void OnLocationGenerated(CP14LocationGeneratedEvent args)
{
var query = EntityQueryEnumerator<CP14StationGlobalWorldComponent>();
while (query.MoveNext(out var ent, out var comp))
{
//Theres no support for multiple GlobalWorld
if (comp.LocationInGeneration.Contains(args.JobName))
{
comp.LocationInGeneration.Remove(args.JobName);
_sawmill.Debug($"Location {args.JobName} generated successfully. Remaining: {comp.LocationInGeneration.Count}");
}
if (comp.LocationInGeneration.Count == 0)
{
//All locations are generated, we can now spawn the global world map
_sawmill.Debug("All locations generated, spawning global world map.");
var ev = new CP14GlobalWorldGeneratedEvent();
RaiseLocalEvent(ent, ev);
}
}
}
private void OnIntegratedPostInit(Entity<CP14StationGlobalWorldComponent> ent, ref StationPostInitEvent args)
{
GenerateGlobalWorldMap(ent);
SpawnGlobalWorldMap(ent);
}
private void OnGlobalWorldGenerated(Entity<CP14StationGlobalWorldComponent> ent, ref CP14GlobalWorldGeneratedEvent ev)
{
ConnectGlobalWorldMap(ent);
}
private void SpawnGlobalWorldMap(Entity<CP14StationGlobalWorldComponent> ent)
{
foreach (var (position, node) in ent.Comp.Nodes)
{
if (node.LocationConfig is null)
continue;
if (node.MapUid is null)
{
_map.CreateMap(out var newMapId, runMapInit: false);
node.MapUid = newMapId;
}
var mapId = node.MapUid.Value;
var mapUid = _map.GetMap(mapId);
var jobName = $"job_GW_{position}";
ent.Comp.LocationInGeneration.Add(jobName);
_generation.GenerateLocation(
mapUid,
mapId,
node.LocationConfig.Value,
node.Modifiers,
jobName: jobName
);
// Avoid renaming the settlement
if (position != Vector2i.Zero)
{
var newName = $"{position} - {node.LocationConfig.Value}";
_meta.SetEntityName(mapUid, newName);
}
}
}
private void ConnectGlobalWorldMap(Entity<CP14StationGlobalWorldComponent> ent)
{
foreach (var edge in ent.Comp.Edges)
{
var firstNodeMapUid = ent.Comp.Nodes[edge.Item1].MapUid;
var secondNodeMapUid = ent.Comp.Nodes[edge.Item2].MapUid;
EntityUid? firstConnector = null;
EntityUid? secondConnector = null;
//Get random connector from map
var query = EntityQueryEnumerator<CP14GlobalWorldConnectorComponent>();
while (query.MoveNext(out var uid, out _))
{
if (_transform.GetMapId(uid) == firstNodeMapUid)
firstConnector = uid;
if (_transform.GetMapId(uid) == secondNodeMapUid)
secondConnector = uid;
}
if (firstConnector == null || secondConnector == null)
{
_sawmill.Error($"Failed to find connectors for edge {edge.Item1} - {edge.Item2}. " +
$"First: {firstConnector}, Second: {secondConnector}");
continue;
}
var firstPortal = Spawn("CP14LocationPassway", Transform(firstConnector.Value).Coordinates);
var secondPortal = Spawn("CP14LocationPassway", Transform(secondConnector.Value).Coordinates);
_link.TryLink(firstPortal, secondPortal, true);
Del(firstConnector);
Del(secondConnector);
}
}
}
public sealed class CP14GlobalWorldGeneratedEvent : EntityEventArgs
{
}

View File

@@ -1,9 +0,0 @@
namespace Content.Server._CP14.Procedural.GlobalWorld.Components;
/// <summary>
/// The GlobalWorld system connects worlds by creating connecting portals at the location of these markers.
/// </summary>
[RegisterComponent, Access(typeof(CP14GlobalWorldSystem))]
public sealed partial class CP14GlobalWorldConnectorComponent : Component
{
}

View File

@@ -1,37 +0,0 @@
using Content.Shared._CP14.Procedural.Prototypes;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
namespace Content.Server._CP14.Procedural.GlobalWorld.Components;
/// <summary>
/// Generates the surrounding procedural world on the game map, surrounding the mapped settlement.
/// </summary>
[RegisterComponent, Access(typeof(CP14GlobalWorldSystem))]
public sealed partial class CP14StationGlobalWorldComponent : Component
{
[DataField]
public Dictionary<Vector2i, CP14GlobalWorldNode> Nodes = new();
[DataField]
public HashSet<(Vector2i, Vector2i)> Edges = new();
[DataField]
public int LocationCount = 5;
/// <summary>
/// A list of jobName names that are waiting for generation to complete. This is a hack, but I don't know a better way to do it.
/// </summary>
[DataField]
public List<string> LocationInGeneration = new();
}
[Serializable]
public sealed class CP14GlobalWorldNode()
{
public MapId? MapUid;
public int Level = 0;
public ProtoId<CP14ProceduralLocationPrototype>? LocationConfig;
public List<ProtoId<CP14ProceduralModifierPrototype>> Modifiers = new();
}

View File

@@ -23,7 +23,11 @@ public sealed partial class CP14SpellThrowFromUser : CP14SpellEffect
var xform = entManager.System<SharedTransformSystem>();
var worldPos = xform.GetWorldPosition(args.User.Value);
var foo = Vector2.Normalize(xform.GetWorldPosition(args.Target.Value) - worldPos);
var dir = xform.GetWorldPosition(args.Target.Value) - worldPos;
if (dir == Vector2.Zero)
return;
var foo = Vector2.Normalize(dir);
if (entManager.TryGetComponent<EmbeddableProjectileComponent>(targetEntity, out var embeddable))
{

View File

@@ -23,12 +23,6 @@ public sealed partial class CP14ProceduralLocationPrototype : IPrototype
[DataField(required: true)]
public ProtoId<DungeonConfigPrototype> LocationConfig;
/// <summary>
/// This modifier will be added to all adjacent connected locations leading to this location.
/// </summary>
[DataField(required: true)]
public ProtoId<CP14ProceduralModifierPrototype> Connection;
[DataField]
public float GenerationProb = 1f;

File diff suppressed because it is too large Load Diff

View File

@@ -69,7 +69,6 @@
- type: CP14AreaEntityEffect
range: 1
effects:
- !type:CP14SpellThrowFromUser
- !type:CP14SpellApplyEntityEffect
effects:
- !type:Electrocute
@@ -77,7 +76,7 @@
- !type:HealthChange
damage:
types:
Shock: 15
Shock: 0
- type: CP14FarSound
closeSound:
path: /Audio/_CP14/Ambience/Lightning/lightning_close1.ogg

View File

@@ -1,36 +0,0 @@
- type: entity
parent: MarkerBase
id: CP14SpawnerLocationConnection
name: Location connection
categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
- state: green
- sprite: _CP14/Structures/Flora/demiplane_cracks.rsi
state: crack
- type: CP14GlobalWorldConnector
- type: entity
id: CP14LocationPassway
parent: BasePortal
categories: [ HideSpawnMenu ]
name: location passway
description: A gap in space that allows you to travel between worlds.
components:
- 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: AmbientSound
volume: -3
range: 7
sound:
path: /Audio/Ambience/Objects/gravity_gen_hum.ogg
- type: Portal
canTeleportToOtherMaps: true

View File

@@ -113,6 +113,7 @@
templateId: CP14Human
- type: TransferMindOnGib
- type: GhostTakeoverAvailable
- type: CP14DemiplaneBlockInteractions
- type: entity
parent: CP14BaseSpeciesDummy

View File

@@ -0,0 +1,111 @@
- type: entity
id: CP14DemiplaneRiftCore
name: demiplane rift core
description: Touch to open the door to a new world
categories: [ ForkFiltered ]
placement:
mode: SnapgridCenter
components:
- type: Sprite
noRot: true
drawdepth: Mobs
sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi
layers:
- state: connective
shader: unshaded
- type: CP14DemiplaneRift
- type: Clickable
- type: InteractionOutline
- type: PointLight
enabled: true
color: "#8f42ff"
energy: 1
radius: 5
- type: entity
parent: MarkerBase
id: CP14DemiplaneEnterPointMarker
name: demiplane enter point
categories: [ ForkFiltered ]
components:
- type: Sprite
layers:
- state: green
- sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi
state: core1
- type: CP14DemiplaneEnterPoint
- type: entity
id: CP14DemiplaneRiftAwaiting
parent: BasePortal
categories: [ ForkFiltered ]
name: unstable demiplane rift
description: A gap in space that allows you to travel between worlds. It is still unstable, and entering it is hazardous to your health.
components:
- type: Sprite
noRot: true
drawdepth: Effects
sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift.rsi
layers:
- state: pulse
shader: unshaded
- type: PointLight
enabled: true
color: "#8f42ff"
energy: 1
radius: 5
- type: SingularityDistortion
falloffPower: 1.5
intensity: 50
- type: LightBehaviour
behaviours:
- !type:PulseBehaviour
interpolate: Cubic
maxDuration: 2
startValue: 0.1
endValue: 1.0
property: Energy
isLooped: true
enabled: true
- type: AmbientSound
volume: -3
range: 7
sound:
path: /Audio/Ambience/anomaly_scary.ogg
- type: Portal
maxRandomRadius: 10
- type: ConditionalSpawner
prototypes:
- CP14SkyLightningPurple
- type: entity
id: CP14DemiplaneRiftPortal
parent: BasePortal
categories: [ ForkFiltered ]
name: demiplane rift
description: A gap in space that allows you to travel between worlds.
components:
- type: Sprite
noRot: true
drawdepth: Effects
sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift.rsi
layers:
- state: anom
shader: unshaded
- type: PointLight
enabled: true
color: "#8f42ff"
energy: 1
radius: 5
- type: AmbientSound
volume: -3
range: 7
sound:
path: /Audio/Ambience/Objects/gravity_gen_hum.ogg
- type: Portal
canTeleportToOtherMaps: true
- type: EmitSoundOnSpawn
sound:
path: /Audio/_CP14/Effects/ritual_end.ogg
params:
variation: 0.3

View File

@@ -49,8 +49,19 @@
- PersonalHouse8
- PersonalHouse9
- PersonalHouse10
- type: CP14StationGlobalWorld
- type: CP14StationGlobalWorldIntegration
- type: CP14StationProceduralLocation
location: ComossIsland
modifiers:
- DemiplaneArcTriple
- RaidSpawners
- SmallHydra
- EnemyFlem
- MonsterMosquito
- Marble
- CopperOre
- CopperOre
- CoalOre
- CP14CrystalQuartzOrder
- Quartz
- FlyAgaric
- BloodFlower

View File

@@ -15,5 +15,4 @@
# - type: StationJobs
# availableJobs:
# #Mercenary
# CP14Adventurer: [ -1, -1 ]
# - type: CP14StationGlobalWorld
# CP14Adventurer: [ -1, -1 ]

View File

@@ -45,8 +45,18 @@
- PersonalHouse4
- PersonalHouse5
- PersonalHouse6
- type: CP14StationGlobalWorld
- type: CP14StationGlobalWorldIntegration
- type: CP14StationProceduralLocation
location: VenicialistFort
modifiers:
- DemiplaneArcTriple
- RaidSpawners
- CopperOre
- CopperOre
- CoalOre
- CP14CrystalQuartzWater
- Quartz
- Ruins
- EnemyZombie
- MobSlimeIce
- LumiShroom
- SilverNeedle

View File

@@ -1,7 +1,6 @@
- type: cp14Location
id: ComossIsland
locationConfig: CP14ComossIsland
connection: ConnectionGrass
generationProb: 0 #Special location for map only
tags:
- CP14DemiplaneOres

View File

@@ -1,7 +1,6 @@
- type: cp14Location
id: VenicialistFort
locationConfig: CP14VenicialistFort
connection: ConnectionSnow
generationProb: 0 #Special location for map only
tags:
- CP14DemiplaneOres

View File

@@ -4,7 +4,6 @@
min: 1
max: 2
locationConfig: CP14Caves
connection: ConnectionStone
tags:
- CP14DemiplaneOres
- CP14DemiplaneUnderground
@@ -17,7 +16,7 @@
layers:
# Masks
- !type:NoiseDistanceDunGen
size: 120, 120
size: 90, 90
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.9
layers:
@@ -31,7 +30,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 80, 80
size: 60, 60
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.5
layers:

View File

@@ -4,7 +4,6 @@
min: 2
max: 10
locationConfig: CP14IceCaves
connection: ConnectionSnow
tags:
- CP14DemiplaneOres
- CP14DemiplaneUnderground
@@ -18,7 +17,7 @@
layers:
# Masks
- !type:NoiseDistanceDunGen
size: 120, 120
size: 90, 90
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.9
layers:
@@ -32,7 +31,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 80, 80
size: 60, 60
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.5
layers:

View File

@@ -4,7 +4,6 @@
min: 3
max: 10
locationConfig: CP14MagmaCaves
connection: ConnectionStone
tags:
- CP14DemiplaneOres
- CP14DemiplaneUnderground
@@ -18,7 +17,7 @@
layers:
# Masks
- !type:NoiseDistanceDunGen
size: 120, 120
size: 90, 90
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.7
layers:
@@ -32,7 +31,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 110, 110
size: 80, 80
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.8
layers:
@@ -46,7 +45,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 80, 80
size: 60, 60
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.7
layers:
@@ -60,7 +59,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 50, 50
size: 30, 30
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.8
layers:
@@ -83,6 +82,6 @@
tileMask:
- CP14FloorGrass
- !type:CP14BiomeDunGen
biomeTemplate: CP14MarbleCaves
biomeTemplate: CP14LavaOceanFill
tileMask:
- CP14FloorMarble

View File

@@ -4,7 +4,6 @@
min: 1
max: 10
locationConfig: CP14MushroomCaves
connection: ConnectionMushroom
tags:
- CP14DemiplaneOres
- CP14DemiplaneUnderground
@@ -18,7 +17,7 @@
layers:
# Masks
- !type:NoiseDistanceDunGen
size: 120, 120
size: 90, 90
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.9
layers:
@@ -32,7 +31,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 80, 80
size: 60, 60
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.5
layers:

View File

@@ -4,7 +4,6 @@
min: 1
max: 10
locationConfig: CP14SwampGeode
connection: ConnectionGrass
tags:
- CP14DemiplaneOres
- CP14DemiplaneHerbals
@@ -20,7 +19,7 @@
layers:
# Masks
- !type:NoiseDistanceDunGen
size: 120, 120
size: 90, 90
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.9
layers:
@@ -34,7 +33,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 80, 80
size: 60, 60
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.7
layers:

View File

@@ -4,7 +4,6 @@
min: 0
max: 2
locationConfig: CP14GrasslandIsland
connection: ConnectionGrass
tags:
- CP14DemiplaneOres
- CP14DemiplaneHerbals
@@ -25,7 +24,7 @@
layers:
# Masks
- !type:NoiseDistanceDunGen
size: 160, 160
size: 120, 120
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.7
layers:
@@ -39,7 +38,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 150, 150
size: 115, 115
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.6
layers:
@@ -53,7 +52,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 110, 110
size: 90, 90
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.5
layers:

View File

@@ -4,7 +4,6 @@
min: 2
max: 10
locationConfig: CP14SnowIsland
connection: ConnectionSnow
tags:
- CP14DemiplaneOres
- CP14DemiplaneOpenSky
@@ -25,7 +24,7 @@
layers:
# Masks
- !type:NoiseDistanceDunGen
size: 160, 160
size: 120, 120
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.7
layers:
@@ -39,7 +38,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 150, 150
size: 115, 115
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.6
layers:
@@ -53,7 +52,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 110, 110
size: 90, 90
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.5
layers:

View File

@@ -4,7 +4,6 @@
min: 1
max: 10
locationConfig: CP14LeafMaze
connection: ConnectionGrass
tags:
- CP14DemiplaneHerbals
- CP14DemiplaneOpenSky
@@ -26,7 +25,7 @@
layers:
# Masks
- !type:NoiseDistanceDunGen
size: 120, 120
size: 90, 90
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.9
layers:
@@ -40,7 +39,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 80, 80
size: 60, 60
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.5
layers:

View File

@@ -1,10 +1,9 @@
- type: cp14Location
id: T1Wastelands
levels:
min: 2
max: 2
min: 3
max: 5
locationConfig: CP14WastelandsIsland
connection: ConnectionStone
tags:
- CP14DemiplaneOres
- CP14DemiplaneOpenSky
@@ -23,7 +22,7 @@
layers:
# Masks
- !type:NoiseDistanceDunGen
size: 160, 160
size: 120, 120
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.7
layers:
@@ -37,7 +36,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 150, 150
size: 115, 115
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.6
layers:
@@ -51,7 +50,7 @@
lacunarity: 2
gain: 0.5
- !type:NoiseDistanceDunGen
size: 110, 110
size: 90, 90
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.5
layers:

View File

@@ -4,7 +4,7 @@
id: Lava
levels:
min: 2
max: 10
max: 5
generationWeight: 0.3
categories:
Danger: 0.25

View File

@@ -4,7 +4,7 @@
id: EnemyZombie
levels:
min: 0
max: 6
max: 3
name: cp14-modifier-zombie
generationWeight: 1.5
categories:
@@ -21,8 +21,8 @@
- type: cp14LocationModifier
id: EnemyDyno
levels:
min: 2
max: 8
min: 3
max: 5
name: cp14-modifier-dyno
categories:
Danger: 0.4
@@ -40,7 +40,7 @@
id: MonsterMosquito
levels:
min: 0
max: 5
max: 2
name: cp14-modifier-dyno
categories:
Danger: 0.25
@@ -60,7 +60,7 @@
id: Fairy
levels:
min: 0
max: 5
max: 3
categories:
Danger: 0.20
requiredTags:
@@ -76,7 +76,7 @@
id: SmallHydra
levels:
min: 0
max: 5
max: 2
name: cp14-modifier-dyno
categories:
Danger: 0.25
@@ -93,7 +93,7 @@
id: EnemyFlem
levels:
min: 0
max: 8
max: 2
name: cp14-modifier-flem
generationWeight: 0.33
categories:
@@ -113,8 +113,8 @@
- type: cp14LocationModifier
id: EnemyMole
levels:
min: 1
max: 10
min: 2
max: 5
name: cp14-modifier-mole
categories:
Danger: 0.4
@@ -130,8 +130,8 @@
- type: cp14LocationModifier
id: EnemyIceSpectre
levels:
min: 0
max: 10
min: 2
max: 5
name: cp14-modifier-zombie
categories:
Danger: 0.4
@@ -150,7 +150,7 @@
id: MobSlimeElectric
levels:
min: 1
max: 10
max: 5
name: cp14-modifier-slime
categories:
Danger: 0.35
@@ -165,7 +165,7 @@
id: MobSlimeFire
levels:
min: 2
max: 10
max: 5
name: cp14-modifier-slime
categories:
Danger: 0.3
@@ -182,7 +182,7 @@
id: MobSlimeIce
levels:
min: 0
max: 10
max: 5
name: cp14-modifier-slime
categories:
Danger: 0.3
@@ -199,7 +199,7 @@
id: MobSlimeBase
levels:
min: 0
max: 5
max: 1
categories:
Danger: 0.25
layers:
@@ -213,7 +213,7 @@
id: MobWatcherIce
levels:
min: 1
max: 10
max: 2
name: cp14-modifier-watcher
categories:
Danger: 0.3
@@ -232,7 +232,7 @@
id: MobWatcherMagma
levels:
min: 1
max: 10
max: 2
name: cp14-modifier-watcher
categories:
Danger: 0.3
@@ -250,8 +250,8 @@
- type: cp14LocationModifier
id: MobSpiders
levels:
min: 1
max: 10
min: 2
max: 4
name: cp14-modifier-spiders
categories:
Danger: 0.3
@@ -277,8 +277,8 @@
- type: cp14LocationModifier
id: MobBigBear
levels:
min: 2
max: 10
min: 3
max: 5
categories:
Danger: 0.5
requiredTags:
@@ -295,7 +295,7 @@
id: MyconideFlyagaric
levels:
min: 0
max: 10
max: 5
categories:
Danger: 0.3
requiredTags:
@@ -311,7 +311,7 @@
id: MyconideLumish
levels:
min: 0
max: 10
max: 5
categories:
Danger: 0.3
requiredTags:

View File

@@ -2,7 +2,7 @@
id: RoyalPumpkin
levels:
min: 0
max: 10
max: 5
generationWeight: 0.1
generationProb: 0.1
categories:
@@ -25,7 +25,7 @@
id: LucenTree
levels:
min: 0
max: 10
max: 5
generationWeight: 0.1
generationProb: 0.1
categories:
@@ -48,7 +48,7 @@
id: StatueStoneHead
levels:
min: 0
max: 6
max: 5
generationWeight: 0.1
generationProb: 0.1
categories:

View File

@@ -19,7 +19,7 @@
id: EnemySkeletonT2
levels:
min: 4
max: 10
max: 5
name: cp14-modifier-skeleton
generationWeight: 2.0
categories:
@@ -35,7 +35,7 @@
id: EnemyLurker
levels:
min: 0
max: 10
max: 5
generationWeight: 0.33
generationProb: 0.25
categories:

View File

@@ -2,7 +2,7 @@
id: MapLightDarkness
levels:
min: 2
max: 10
max: 5
generationWeight: 2
categories:
MapLight: 1
@@ -15,7 +15,7 @@
id: MapLightDarkRed
levels:
min: 3
max: 10
max: 5
categories:
MapLight: 1
name: cp14-modifier-night
@@ -65,7 +65,7 @@
id: MapLightCycleDefault
levels:
min: 0
max: 10
max: 5
categories:
MapLight: 1
generationWeight: 2
@@ -78,7 +78,7 @@
id: MapLightCycleCold
levels:
min: 0
max: 10
max: 5
categories:
MapLight: 1
generationWeight: 2
@@ -93,7 +93,7 @@
id: MapLightCycleHot
levels:
min: 0
max: 10
max: 5
categories:
MapLight: 1
requiredTags:
@@ -107,7 +107,7 @@
id: MapLightCycleHot2
levels:
min: 0
max: 10
max: 5
categories:
MapLight: 1
requiredTags:

View File

@@ -1,10 +1,29 @@
# TIER 1
- type: cp14LocationModifier
id: Marble
levels:
min: 0
max: 5
unique: true
categories:
Ore: 0
requiredTags:
- CP14DemiplaneOres
layers:
- !type:CP14OreDunGen
entityMask:
- CP14WallStone
entity: CP14WallMarbleStone
count: 5
minGroupSize: 5
maxGroupSize: 10
- type: cp14LocationModifier
id: IronOre
levels:
min: 0
max: 10
min: 1
max: 5
name: cp14-modifier-iron-ore
unique: false
categories:
@@ -24,8 +43,8 @@
- type: cp14LocationModifier
id: IronOreUnderground
levels:
min: 0
max: 10
min: 1
max: 5
name: cp14-modifier-iron-ore
unique: false
categories:
@@ -46,7 +65,7 @@
id: CopperOre
levels:
min: 0
max: 5
max: 2
name: cp14-modifier-copper-ore
unique: false
categories:
@@ -67,7 +86,7 @@
id: CopperOreUnderground
levels:
min: 0
max: 5
max: 2
name: cp14-modifier-copper-ore
unique: false
categories:
@@ -88,7 +107,7 @@
id: CoalOre
levels:
min: 0
max: 8
max: 2
name: cp14-modifier-coal-ore
unique: false
categories:
@@ -109,7 +128,7 @@
id: CoalOreUnderground
levels:
min: 0
max: 8
max: 2
name: cp14-modifier-copper-ore
unique: false
categories:
@@ -131,8 +150,8 @@
- type: cp14LocationModifier
id: GoldOre
levels:
min: 2
max: 10
min: 3
max: 5
unique: false
categories:
Ore: 0.25
@@ -150,8 +169,8 @@
- type: cp14LocationModifier
id: MithrilOre
levels:
min: 2
max: 10
min: 4
max: 5
name: cp14-modifier-mithril-ore
unique: false
categories:
@@ -171,8 +190,8 @@
- type: cp14LocationModifier
id: MithrilOreUnderground
levels:
min: 2
max: 10
min: 4
max: 5
name: cp14-modifier-mithril-ore
unique: false
categories:

View File

@@ -0,0 +1,41 @@
- type: cp14LocationModifier
id: DemiplaneArcTriple
levels:
min: 0
max: 1
generationWeight: 0.3
categories:
Passage: 1
layers:
- !type:CP14RoomsDunGen
count: 3
tags:
- CP14DemiplanArcRoom
- type: cp14LocationModifier
id: DemiplaneArcDouble
levels:
min: 0
max: 3
generationWeight: 0.6
categories:
Passage: 1
layers:
- !type:CP14RoomsDunGen
count: 2
tags:
- CP14DemiplanArcRoom
- type: cp14LocationModifier
id: DemiplaneArcSingle
levels:
min: 1
max: 4
generationWeight: 1
categories:
Passage: 1
layers:
- !type:CP14RoomsDunGen
count: 1
tags:
- CP14DemiplanArcRoom

View File

@@ -2,7 +2,7 @@
id: Quartz
levels:
min: 0
max: 10
max: 2
categories:
Reward: 0.15
layers:
@@ -15,8 +15,8 @@
- type: cp14LocationModifier
id: CP14CrystalQuartzEarth
levels:
min: 0
max: 10
min: 2
max: 5
generationWeight: 0.1
requiredTags:
- CP14DemiplaneUnderground
@@ -32,8 +32,8 @@
- type: cp14LocationModifier
id: CP14CrystalQuartzFire
levels:
min: 0
max: 10
min: 2
max: 5
generationWeight: 0.1
requiredTags:
- CP14DemiplaneHot
@@ -49,8 +49,8 @@
- type: cp14LocationModifier
id: CP14CrystalQuartzWater
levels:
min: 0
max: 10
min: 2
max: 5
generationWeight: 0.1
requiredTags:
- CP14DemiplaneWater
@@ -66,8 +66,8 @@
- type: cp14LocationModifier
id: CP14CrystalQuartzAir
levels:
min: 0
max: 10
min: 2
max: 5
generationWeight: 0.1
requiredTags:
- CP14DemiplaneOpenSky
@@ -83,8 +83,8 @@
- type: cp14LocationModifier
id: CP14CrystalQuartzOrder
levels:
min: 0
max: 10
min: 2
max: 5
generationWeight: 0.1
categories:
Reward: 0.15
@@ -98,8 +98,8 @@
- type: cp14LocationModifier
id: CP14CrystalQuartzChaos
levels:
min: 0
max: 10
min: 2
max: 5
generationWeight: 0.1
categories:
Reward: 0.15

View File

@@ -4,7 +4,7 @@
id: LootT1
levels:
min: 0
max: 3
max: 2
generationWeight: 2
categories:
Reward: 0.15
@@ -19,7 +19,7 @@
id: Rabbits
levels:
min: 0
max: 10
max: 5
name: cp14-modifier-rabbits
generationWeight: 0.4
categories:
@@ -37,7 +37,7 @@
id: Boar
levels:
min: 0
max: 10
max: 3
name: cp14-modifier-boars
generationWeight: 0.4
categories:
@@ -55,7 +55,7 @@
id: Frog
levels:
min: 0
max: 10
max: 3
generationWeight: 0.4
categories:
Reward: 0.1
@@ -76,7 +76,7 @@
id: Sheep
levels:
min: 0
max: 10
max: 3
name: cp14-modifier-sheeps
generationWeight: 0.4
categories:
@@ -95,8 +95,8 @@
- type: cp14LocationModifier
id: LootT2
levels:
min: 2
max: 10
min: 4
max: 5
generationWeight: 2
categories:
Reward: 0.15

View File

@@ -1,8 +1,8 @@
- type: cp14LocationModifier
id: ArtifactRoom
levels:
min: 1
max: 10
min: 3
max: 5
generationWeight: 2
categories:
Reward: 0.15
@@ -16,7 +16,7 @@
id: Ruins
levels:
min: 0
max: 10
max: 5
name: cp14-modifier-ruins
categories:
Reward: 0.2
@@ -30,8 +30,8 @@
- type: cp14LocationModifier
id: Geodes
levels:
min: 0
max: 10
min: 1
max: 3
name: cp14-modifier-ruins
categories:
Reward: 0.15

View File

@@ -19,3 +19,6 @@
- type: cp14LocationModifierCategory
id: MapLight
- type: cp14LocationModifierCategory
id: Passage

View File

@@ -1,35 +0,0 @@
- type: cp14LocationModifier
id: ConnectionStone
generationProb: 0
layers:
- !type:CP14RoomsDunGen
count: 2
tags:
- CP14LocationConnectionStone
- type: cp14LocationModifier
id: ConnectionSnow
generationProb: 0
layers:
- !type:CP14RoomsDunGen
count: 2
tags:
- CP14LocationConnectionSnow
- type: cp14LocationModifier
id: ConnectionMushroom
generationProb: 0
layers:
- !type:CP14RoomsDunGen
count: 2
tags:
- CP14LocationConnectionMushroom
- type: cp14LocationModifier
id: ConnectionGrass
generationProb: 0
layers:
- !type:CP14RoomsDunGen
count: 2
tags:
- CP14LocationConnectionGrass

View File

@@ -29,4 +29,13 @@
- CP14FloorSnow
count: 8
minGroupSize: 3
maxGroupSize: 3
maxGroupSize: 3
- type: cp14LocationModifier
id: CP14DemiplanEnterRoom
generationProb: 0
layers:
- !type:CP14RoomsDunGen
count: 2
tags:
- CP14DemiplanEnterRoom

View File

@@ -0,0 +1,47 @@
- type: Tag
id: CP14DemiplanArcRoom
- type: dungeonRoom
id: CP14DemiplanArcRoom_1
size: 7,7
atlas: /Maps/_CP14/Dungeon/demiplane_arc.yml
ignoreTile: FloorShuttlePurple
offset: 0,0
tags:
- CP14DemiplanArcRoom
- type: dungeonRoom
id: CP14DemiplanArcRoom_2
size: 7,7
atlas: /Maps/_CP14/Dungeon/demiplane_arc.yml
ignoreTile: FloorShuttlePurple
offset: 8,0
tags:
- CP14DemiplanArcRoom
- type: dungeonRoom
id: CP14DemiplanArcRoom_3
size: 7,7
atlas: /Maps/_CP14/Dungeon/demiplane_arc.yml
ignoreTile: FloorShuttlePurple
offset: 16,0
tags:
- CP14DemiplanArcRoom
- type: dungeonRoom
id: CP14DemiplanArcRoom_4
size: 7,7
atlas: /Maps/_CP14/Dungeon/demiplane_arc.yml
ignoreTile: FloorShuttlePurple
offset: 24,0
tags:
- CP14DemiplanArcRoom
- type: dungeonRoom
id: CP14DemiplanArcRoom_5
size: 7,7
atlas: /Maps/_CP14/Dungeon/demiplane_arc.yml
ignoreTile: FloorShuttlePurple
offset: 32,0
tags:
- CP14DemiplanArcRoom

View File

@@ -42,24 +42,6 @@
size: 7,7
atlas: /Maps/_CP14/Dungeon/demiplane_enter.yml
ignoreTile: FloorShuttlePurple
offset: 0,8
offset: 32,0
tags:
- CP14DemiplanEnterRoom
- type: dungeonRoom
id: CP14DemiplanEnterRoom_6
size: 9,7
atlas: /Maps/_CP14/Dungeon/demiplane_enter.yml
ignoreTile: FloorShuttlePurple
offset: 8,8
tags:
- CP14DemiplanEnterRoom
- type: dungeonRoom
id: CP14DemiplanEnterRoom_7
size: 7,7
atlas: /Maps/_CP14/Dungeon/demiplane_enter.yml
ignoreTile: FloorShuttlePurple
offset: 19,8
tags:
- CP14DemiplanEnterRoom
- CP14DemiplanEnterRoom

View File

@@ -1,86 +0,0 @@
- type: Tag
id: CP14LocationConnectionStone
- type: dungeonRoom
id: CP14LocationConnectionStone_1
size: 7,7
atlas: /Maps/_CP14/Dungeon/location_connections.yml
ignoreTile: FloorShuttlePurple
offset: 0,0
tags:
- CP14LocationConnectionStone
- type: dungeonRoom
id: CP14LocationConnectionStone_2
size: 7,7
atlas: /Maps/_CP14/Dungeon/location_connections.yml
ignoreTile: FloorShuttlePurple
offset: 8,0
tags:
- CP14LocationConnectionStone
- type: Tag
id: CP14LocationConnectionSnow
- type: dungeonRoom
id: CP14LocationConnectionSnow_1
size: 7,7
atlas: /Maps/_CP14/Dungeon/location_connections.yml
ignoreTile: FloorShuttlePurple
offset: 16,0
tags:
- CP14LocationConnectionSnow
- type: dungeonRoom
id: CP14LocationConnectionSnow_2
size: 7,7
atlas: /Maps/_CP14/Dungeon/location_connections.yml
ignoreTile: FloorShuttlePurple
offset: 24,0
tags:
- CP14LocationConnectionSnow
- type: Tag
id: CP14LocationConnectionMushroom
- type: dungeonRoom
id: CP14LocationConnectionMushroom_1
size: 7,7
atlas: /Maps/_CP14/Dungeon/location_connections.yml
ignoreTile: FloorShuttlePurple
offset: 32,0
tags:
- CP14LocationConnectionMushroom
- type: dungeonRoom
id: CP14LocationConnectionMushroom_2
size: 7,7
atlas: /Maps/_CP14/Dungeon/location_connections.yml
ignoreTile: FloorShuttlePurple
offset: 40,0
tags:
- CP14LocationConnectionMushroom
- type: Tag
id: CP14LocationConnectionGrass
- type: dungeonRoom
id: CP14LocationConnectionGrass_1
size: 7,7
atlas: /Maps/_CP14/Dungeon/location_connections.yml
ignoreTile: FloorShuttlePurple
offset: 0,8
tags:
- CP14LocationConnectionGrass
- type: dungeonRoom
id: CP14LocationConnectionGrass_2
size: 7,7
atlas: /Maps/_CP14/Dungeon/location_connections.yml
ignoreTile: FloorShuttlePurple
offset: 8,8
tags:
- CP14LocationConnectionGrass

View File

@@ -438,6 +438,8 @@ CP14SpellScrollMonolithWarp: null
CP14GuidebookDemiplanes: null
CP14DemiplanePassway: null
CP14DemiplaneCore: null
CP14SpawnerLocationConnection: null
CP14LocationPassway: null
# <---> CrystallEdge migration zone end