Planetarization (#1040)

* tiers to level demiplanes

* Update demiplane_keys.yml

* demiplane on planets

* migrate to wizden dayCycle + planetarize Comoss

* Update comoss_d.yml

* Update audio_music.yml

* Update dev_map.yml

* add shadows to demiplanes

* remove outdated systems

* fix silvas

* silva fix

* Update factoria.yml

* Update island.yml
This commit is contained in:
Ed
2025-03-19 12:52:37 +03:00
committed by GitHub
parent d7c4bc0a5c
commit 1867903c46
70 changed files with 17764 additions and 23767 deletions

View File

@@ -1,7 +1,7 @@
using System.Numerics;
using Content.Client.Parallax;
using Content.Client.Weather;
using Content.Shared._CP14.DayCycle.Components;
using Content.Shared._CP14.CloudShadow;
using Content.Shared.Salvage;
using Content.Shared.Weather;
using Robust.Client.GameObjects;
@@ -62,7 +62,7 @@ public sealed partial class StencilOverlay : Overlay
{
foreach (var (proto, weather) in comp.Weather)
{
if (!_protoManager.TryIndex<WeatherPrototype>(proto, out var weatherProto))
if (!_protoManager.TryIndex(proto, out var weatherProto))
continue;
var alpha = _weather.GetPercent(weather, mapUid);

View File

@@ -1,5 +1,5 @@
using System.Numerics;
using Content.Shared._CP14.DayCycle.Components;
using Content.Shared._CP14.CloudShadow;
using Robust.Client.Graphics;
using Robust.Shared.Utility;

View File

@@ -1,7 +1,7 @@
using Content.Shared._CP14.DayCycle.Components;
using Content.Shared._CP14.CloudShadow;
using Robust.Shared.Random;
namespace Content.Server._CP14.DayCycle;
namespace Content.Server._CP14.CloudShadow;
public sealed class CP14CloudShadowsSystem : EntitySystem
{

View File

@@ -1,134 +0,0 @@
using Content.Shared._CP14.DayCycle;
using Content.Shared._CP14.DayCycle.Components;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Timing;
namespace Content.Server._CP14.DayCycle;
public sealed partial class CP14DayCycleSystem : CP14SharedDayCycleSystem
{
public const int MinTimeEntryCount = 2;
private const float MaxTimeDiff = 0.05f;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CP14DayCycleComponent, MapInitEvent>(OnMapInitDayCycle);
}
private void OnMapInitDayCycle(Entity<CP14DayCycleComponent> dayCycle, ref MapInitEvent args)
{
dayCycle.Comp.IndexedCycle = _proto.Index(dayCycle.Comp.CycleProto);
Init(dayCycle);
if (dayCycle.Comp.StartWithRandomEntry && dayCycle.Comp.IndexedCycle.TimeEntries.Count > 1)
SetTimeEntry(dayCycle, _random.Next(dayCycle.Comp.IndexedCycle.TimeEntries.Count));
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var dayCycleQuery = EntityQueryEnumerator<CP14DayCycleComponent, MapLightComponent>();
while (dayCycleQuery.MoveNext(out var uid, out var dayCycle, out var mapLight))
{
var entity = new Entity<CP14DayCycleComponent, MapLightComponent>(uid, dayCycle, mapLight);
if (dayCycle.IndexedCycle is null)
continue;
if (dayCycle.IndexedCycle.TimeEntries.Count < MinTimeEntryCount)
continue;
SetAmbientColor((entity, entity), GetCurrentColor(entity, _timing.CurTime.TotalSeconds));
if (_timing.CurTime <= dayCycle.EntryEndTime)
continue;
SetTimeEntry((uid, dayCycle), dayCycle.NextTimeEntryIndex);
}
}
public void Init(Entity<CP14DayCycleComponent> dayCycle)
{
if (dayCycle.Comp.IndexedCycle is null)
return;
if (dayCycle.Comp.IndexedCycle.TimeEntries.Count < MinTimeEntryCount)
{
Log.Warning($"Attempting to init a day/night cycle with the number of time entries less than {MinTimeEntryCount}");
return;
}
dayCycle.Comp.CurrentTimeEntryIndex = 0;
dayCycle.Comp.EntryStartTime = _timing.CurTime;
dayCycle.Comp.EntryEndTime = _timing.CurTime + dayCycle.Comp.CurrentTimeEntry!.Value.Duration;
Dirty(dayCycle);
}
public void AddTimeEntry(Entity<CP14DayCycleComponent> dayCycle, DayCycleEntry entry)
{
if (dayCycle.Comp.IndexedCycle is null)
return;
dayCycle.Comp.IndexedCycle.TimeEntries.Add(entry);
Dirty(dayCycle);
}
public void SetTimeEntry(Entity<CP14DayCycleComponent> dayCycle, int nextEntry)
{
if (dayCycle.Comp.IndexedCycle is null)
return;
nextEntry = Math.Clamp(nextEntry, 0, dayCycle.Comp.IndexedCycle.TimeEntries.Count - 1);
dayCycle.Comp.CurrentTimeEntryIndex = nextEntry;
dayCycle.Comp.EntryStartTime = dayCycle.Comp.EntryEndTime;
dayCycle.Comp.EntryEndTime += dayCycle.Comp.CurrentTimeEntry!.Value.Duration;
var ev = new DayCycleChangedEvent(dayCycle.Comp.CurrentTimeEntry);
RaiseLocalEvent(dayCycle, ref ev, true);
Dirty(dayCycle);
}
private void SetAmbientColor(Entity<MapLightComponent> light, Color color)
{
if (color == light.Comp.AmbientLightColor)
return;
light.Comp.AmbientLightColor = color;
Dirty(light);
}
private Color GetCurrentColor(Entity<CP14DayCycleComponent> dayCycle, double totalSeconds)
{
var timeScale = GetTimeScale(dayCycle, totalSeconds);
return Color.InterpolateBetween(dayCycle.Comp.StartColor ?? Color.Black, dayCycle.Comp.EndColor ?? Color.Black, timeScale);
}
private float GetTimeScale(Entity<CP14DayCycleComponent> dayCycle, double totalSeconds)
{
return GetLerpValue(dayCycle.Comp.EntryStartTime.TotalSeconds, dayCycle.Comp.EntryEndTime.TotalSeconds, totalSeconds);
}
private static float GetLerpValue(double start, double end, double current)
{
if (Math.Abs(start - end) < MaxTimeDiff)
return 0f;
var distanceFromStart = current - start;
var totalDistance = end - start;
return MathHelper.Clamp01((float)(distanceFromStart / totalDistance));
}
}

View File

@@ -1,84 +0,0 @@
using Content.Server.Administration;
using Content.Shared._CP14.DayCycle;
using Content.Shared._CP14.DayCycle.Components;
using Content.Shared._CP14.DayCycle.Prototypes;
using Content.Shared.Administration;
using Robust.Shared.Console;
using Robust.Shared.Prototypes;
namespace Content.Server._CP14.DayCycle.Commands;
[AdminCommand(AdminFlags.VarEdit)]
public sealed class CP14AddTimeEntryCommand : LocalizedCommands
{
private const string Name = "cp14-addtimeentry";
private const int ArgumentCount = 4;
public override string Command => Name;
public override string Description => "Allows you to add a new time entry to the map list";
public override string Help => $"{Name} <mapUid> <color> <duration> <periodId>";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
if (args.Length != ArgumentCount)
{
shell.WriteError($"{Loc.GetString("shell-wrong-arguments-number")}\n{Help}");
return;
}
if (!NetEntity.TryParse(args[0], out var netEntity))
{
shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number"));
return;
}
var entityManager = IoCManager.Resolve<IEntityManager>();
var prototypeManager = IoCManager.Resolve<IPrototypeManager>();
var dayCycleSystem = entityManager.System<CP14DayCycleSystem>();
var entity = entityManager.GetEntity(netEntity);
if (!entityManager.TryGetComponent<CP14DayCycleComponent>(entity, out var dayCycle))
{
shell.WriteError(Loc.GetString("shell-entity-with-uid-lacks-component", ("uid", entity), ("componentName", nameof(CP14DayCycleComponent))));
return;
}
if (!Color.TryParse(args[1], out var color))
{
shell.WriteError(Loc.GetString("parse-color-fail", ("args", args[1])));
return;
}
if (!float.TryParse(args[2], out var duration))
{
shell.WriteError(Loc.GetString("parse-float-fail", ("args", args[2])));
return;
}
if (!prototypeManager.TryIndex<CP14DayCyclePeriodPrototype>(args[3], out var prototype))
{
shell.WriteError(Loc.GetString("parse-prototype-fail", ("args", args[3])));
return;
}
var entry = new DayCycleEntry
{
Color = color,
Duration = TimeSpan.FromSeconds(duration),
Period = prototype.ID,
};
dayCycleSystem.AddTimeEntry((entity, dayCycle), entry);
}
public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
{
return args.Length switch
{
1 => CompletionResult.FromOptions(CompletionHelper.Components<CP14DayCycleComponent>(args[0])),
4 => CompletionResult.FromOptions(CompletionHelper.PrototypeIDs<CP14DayCyclePeriodPrototype>()),
_ => CompletionResult.Empty,
};
}
}

View File

@@ -1,64 +0,0 @@
using Content.Server.Administration;
using Content.Shared._CP14.DayCycle;
using Content.Shared.Administration;
using Robust.Shared.Console;
using CP14DayCycleComponent = Content.Shared._CP14.DayCycle.Components.CP14DayCycleComponent;
namespace Content.Server._CP14.DayCycle.Commands;
[AdminCommand(AdminFlags.VarEdit)]
public sealed class CP14InitDayCycleCommand : LocalizedCommands
{
private const string Name = "cp14-initdaycycle";
private const int ArgumentCount = 1;
public override string Command => Name;
public override string Description =>
"Re-initializes the day and night system, but reset the current time entry stage";
public override string Help => $"{Name} <mapUid>";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
if (args.Length != ArgumentCount)
{
shell.WriteError($"{Loc.GetString("shell-wrong-arguments-number")}\n{Help}");
return;
}
if (!NetEntity.TryParse(args[0], out var netEntity))
{
shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number"));
return;
}
var entityManager = IoCManager.Resolve<EntityManager>();
var dayCycleSystem = entityManager.System<CP14DayCycleSystem>();
var entity = entityManager.GetEntity(netEntity);
if (!entityManager.TryGetComponent<CP14DayCycleComponent>(entity, out var dayCycle))
{
shell.WriteError(Loc.GetString("shell-entity-with-uid-lacks-component", ("uid", entity), ("componentName", nameof(CP14DayCycleComponent))));
return;
}
if (dayCycle.IndexedCycle is null)
return;
if (dayCycle.IndexedCycle.TimeEntries.Count < CP14DayCycleSystem.MinTimeEntryCount)
{
shell.WriteError($"Attempting to init a daily cycle with the number of time entries less than {CP14DayCycleSystem.MinTimeEntryCount}");
return;
}
dayCycleSystem.Init((entity, dayCycle));
}
public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
{
return args.Length switch
{
1 => CompletionResult.FromOptions(CompletionHelper.Components<CP14DayCycleComponent>(args[0])),
_ => CompletionResult.Empty,
};
}
}

View File

@@ -1,84 +0,0 @@
using Content.Server.Administration;
using Content.Shared.Administration;
using Robust.Shared.Console;
using CP14DayCycleComponent = Content.Shared._CP14.DayCycle.Components.CP14DayCycleComponent;
namespace Content.Server._CP14.DayCycle.Commands;
[AdminCommand(AdminFlags.VarEdit)]
public sealed class CP14SetTimeEntryCommand : LocalizedCommands
{
private const string Name = "cp14-settimeentry";
private const int ArgumentCount = 2;
public override string Command => Name;
public override string Description => "Sets a new entry at the specified index";
public override string Help => $"{Name} <mapUid> <timeEntry>";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
if (args.Length != ArgumentCount)
{
shell.WriteError($"{Loc.GetString("shell-wrong-arguments-number")}\n{Help}");
return;
}
if (!NetEntity.TryParse(args[0], out var netEntity))
{
shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number"));
return;
}
var entityManager = IoCManager.Resolve<EntityManager>();
var dayCycleSystem = entityManager.System<CP14DayCycleSystem>();
var entity = entityManager.GetEntity(netEntity);
if (!entityManager.TryGetComponent<CP14DayCycleComponent>(entity, out var dayCycle))
{
shell.WriteError(Loc.GetString("shell-entity-with-uid-lacks-component", ("uid", entity), ("componentName", nameof(CP14DayCycleComponent))));
return;
}
if (!int.TryParse(args[1], out var timeEntry))
{
shell.WriteError(Loc.GetString("parse-int-fail", ("args", args[1])));
return;
}
dayCycleSystem.SetTimeEntry((entity, dayCycle), timeEntry);
}
public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
{
var entityManager = IoCManager.Resolve<EntityManager>();
switch (args.Length)
{
case 1:
return CompletionResult.FromOptions(CompletionHelper.Components<CP14DayCycleComponent>(args[0], entityManager));
case 2:
if (!NetEntity.TryParse(args[0], out var mapUid))
return CompletionResult.Empty;
if (!entityManager.TryGetComponent<CP14DayCycleComponent>(entityManager.GetEntity(mapUid), out var component))
return CompletionResult.Empty;
if (component.IndexedCycle is null)
return CompletionResult.Empty;
if (component.IndexedCycle.TimeEntries.Count - 1 < 0)
return CompletionResult.Empty;
var indices = new string[component.IndexedCycle.TimeEntries.Count - 1];
for (var i = 0; i < indices.Length; i++)
{
indices[i] = i.ToString();
}
return CompletionResult.FromOptions(indices);
}
return CompletionResult.Empty;
}
}

View File

@@ -121,7 +121,6 @@ public sealed partial class CP14DemiplaneSystem
JobMaxTime,
EntityManager,
_logManager,
_mapManager,
_proto,
_dungeon,
_metaData,
@@ -218,13 +217,8 @@ public sealed partial class CP14DemiplaneSystem
{
var randomConfig = _random.Pick(suitableConfigs);
if (!generator.Comp.TiersContent.ContainsKey(randomConfig.Tier))
{
suitableConfigs.Remove(randomConfig);
continue;
}
if (!_random.Prob(generator.Comp.TiersContent[randomConfig.Tier]))
//LevelRange filter
if (generator.Comp.Level < randomConfig.Levels.Min || generator.Comp.Level > randomConfig.Levels.Max)
{
suitableConfigs.Remove(randomConfig);
continue;
@@ -265,36 +259,10 @@ public sealed partial class CP14DemiplaneSystem
}
}
//Tier filter
//Levels filter
if (passed)
{
var innerPassed = false;
foreach (var tier in modifier.Tiers)
{
if (generator.Comp.TiersContent.ContainsKey(tier))
{
innerPassed = true;
break;
}
}
if (!innerPassed)
{
passed = false;
}
}
// Tier weight filter
if (passed)
{
var maxProb = 0f;
foreach (var tier in modifier.Tiers)
{
if (generator.Comp.TiersContent.ContainsKey(tier))
maxProb = Math.Max(maxProb, generator.Comp.TiersContent[tier]);
}
if (!_random.Prob(maxProb))
if (generator.Comp.Level < modifier.Levels.Min || generator.Comp.Level > modifier.Levels.Max)
{
passed = false;
}

View File

@@ -17,10 +17,10 @@ public sealed partial class CP14DemiplaneGeneratorDataComponent : Component
public List<ProtoId<CP14DemiplaneModifierPrototype>> SelectedModifiers = new();
/// <summary>
/// Generator Tier. Determines which modifiers and locations will be selected for this demiplane
/// Demiplane Difficulty Level. By design, the plan so far is for a framework of 1 to 10, but technically could support more.
/// </summary>
[DataField(required: true)]
public Dictionary<int, float> TiersContent = new();
public int Level = 1;
[DataField(required: true)]
public Dictionary<ProtoId<CP14DemiplaneModifierCategoryPrototype>, float> Limits = new();

View File

@@ -8,6 +8,7 @@ using Content.Shared.Gravity;
using Content.Shared.Procedural;
using Robust.Shared.CPUJob.JobQueues;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
namespace Content.Server._CP14.Demiplane.Jobs;
@@ -16,7 +17,6 @@ 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;
@@ -37,7 +37,6 @@ public sealed class CP14SpawnRandomDemiplaneJob : Job<bool>
double maxTime,
IEntityManager entManager,
ILogManager logManager,
IMapManager mapManager,
IPrototypeManager protoManager,
DungeonSystem dungeon,
MetaDataSystem metaData,
@@ -50,7 +49,6 @@ public sealed class CP14SpawnRandomDemiplaneJob : Job<bool>
CancellationToken cancellation = default) : base(maxTime, cancellation)
{
_entManager = entManager;
_mapManager = mapManager;
_prototypeManager = protoManager;
_dungeon = dungeon;
_metaData = metaData;
@@ -67,16 +65,12 @@ public sealed class CP14SpawnRandomDemiplaneJob : Job<bool>
protected override async Task<bool> Process()
{
_sawmill.Debug($"Spawning demiplane `{_config.Id}` with seed {_seed}");
var grid = _mapManager.CreateGridEntity(DemiplaneMapUid);
_mapManager.DoMapInitialize(_demiplaneMapId);
_mapManager.SetMapPaused(_demiplaneMapId, false);
var gridComp = _entManager.EnsureComponent<MapGridComponent>(DemiplaneMapUid);
MetaDataComponent? metadata = null;
DungeonConfigPrototype dungeonConfig = new();
_metaData.SetEntityName(DemiplaneMapUid, "TODO: MAP Expedition name generation");
_metaData.SetEntityName(grid, "TODO: GRID Expedition name generation");
_metaData.SetEntityName(DemiplaneMapUid, $"Demiplane {_config.Id} - {_seed}");
//Setup demiplane config
var expeditionConfig = _prototypeManager.Index(_config);
@@ -104,9 +98,9 @@ public sealed class CP14SpawnRandomDemiplaneJob : Job<bool>
}
//Setup gravity
var gravity = _entManager.EnsureComponent<GravityComponent>(grid);
var gravity = _entManager.EnsureComponent<GravityComponent>(DemiplaneMapUid);
gravity.Enabled = true;
_entManager.Dirty(grid, gravity, metadata);
_entManager.Dirty(DemiplaneMapUid, gravity, metadata);
// Setup default atmos
var moles = new float[Atmospherics.AdjustedNumberOfGases];
@@ -115,10 +109,13 @@ public sealed class CP14SpawnRandomDemiplaneJob : Job<bool>
var mixture = new GasMixture(moles, Atmospherics.T20C);
_entManager.System<AtmosphereSystem>().SetMapAtmosphere(DemiplaneMapUid, false, mixture);
_map.InitializeMap(_demiplaneMapId);
_map.SetPaused(_demiplaneMapId, false);
//Spawn modified config
_dungeon.GenerateDungeon(dungeonConfig,
grid,
grid,
DemiplaneMapUid,
gridComp,
Vector2i.Zero,
_seed); //TODO: Transform to Async

View File

@@ -28,7 +28,7 @@ public sealed partial class CP14FarmingSystem
private void OnTakeEnergyFromLight(Entity<CP14PlantEnergyFromLightComponent> regeneration, ref CP14PlantUpdateEvent args)
{
var gainEnergy = false;
var daylight = _dayCycle.UnderSunlight(regeneration);
var daylight = true;//_dayCycle.UnderSunlight(regeneration);
if (regeneration.Comp.Daytime && daylight)
gainEnergy = true;

View File

@@ -1,9 +1,7 @@
using Content.Server._CP14.DayCycle;
using Content.Server._CP14.Farming.Components;
using Content.Server.Destructible;
using Content.Server.DoAfter;
using Content.Server.Popups;
using Content.Shared._CP14.DayCycle;
using Content.Shared._CP14.Farming;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Damage;
@@ -23,7 +21,6 @@ namespace Content.Server._CP14.Farming;
public sealed partial class CP14FarmingSystem : CP14SharedFarmingSystem
{
[Dependency] private readonly DoAfterSystem _doAfter = default!;
[Dependency] private readonly CP14DayCycleSystem _dayCycle = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly TransformSystem _transform = default!;

View File

@@ -1,4 +1,3 @@
using Content.Server._CP14.DayCycle;
using Content.Server._CP14.GameTicking.Rules.Components;
using Content.Server._CP14.Vampire;
using Content.Server.Atmos.Components;
@@ -22,7 +21,6 @@ public sealed class CP14VampireRuleSystem : GameRuleSystem<CP14VampireRuleCompon
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly TemperatureSystem _temperature = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly CP14DayCycleSystem _dayCycle = default!;
[Dependency] private readonly FlammableSystem _flammable = default!;
[Dependency] private readonly BodySystem _body = default!;
@@ -68,8 +66,9 @@ public sealed class CP14VampireRuleSystem : GameRuleSystem<CP14VampireRuleCompon
vampire.NextHeatTime = _timing.CurTime + vampire.HeatFrequency;
if (!_dayCycle.UnderSunlight(uid))
continue;
return;
//if (!_dayCycle.UnderSunlight(uid))
// continue;
_temperature.ChangeHeat(uid, vampire.HeatUnderSunTemperature);
_popup.PopupEntity(Loc.GetString("cp14-heat-under-sun"), uid, uid, PopupType.SmallCaution);

View File

@@ -1,14 +1,12 @@
using Content.Server._CP14.MagicEnergy.Components;
using Content.Shared._CP14.DayCycle;
using Content.Shared._CP14.MagicEnergy.Components;
using Content.Shared.Damage;
using Robust.Shared.Map.Components;
namespace Content.Server._CP14.MagicEnergy;
public partial class CP14MagicEnergySystem
{
[Dependency] private readonly CP14SharedDayCycleSystem _dayCycle = default!;
private void InitializeDraw()
{
SubscribeLocalEvent<CP14MagicEnergyDrawComponent, MapInitEvent>(OnDrawMapInit);
@@ -67,7 +65,18 @@ public partial class CP14MagicEnergySystem
draw.NextUpdateTime = _gameTiming.CurTime + TimeSpan.FromSeconds(draw.Delay);
ChangeEnergy(uid, _dayCycle.UnderSunlight(uid) ? draw.DaylightEnergy : draw.DarknessEnergy, out _, out _, magicContainer, true);
var daylight = false;
//if (TryComp<MapLightComponent>(Transform(uid).MapUid, out var mapLight))
//{
// var color = mapLight.AmbientLightColor;
// var medium = (color.R + color.G + color.B) / 3f;
//
// if (medium > draw.LightThreshold)
// daylight = true;
//}
ChangeEnergy(uid, daylight ? draw.DaylightEnergy : draw.DarknessEnergy, out _, out _, magicContainer, true);
}
}

View File

@@ -1,17 +0,0 @@
namespace Content.Server._CP14.MapDamage;
/// <summary>
/// can take damage from being directly on the map (not on the grid)
/// </summary>
[RegisterComponent, AutoGenerateComponentPause]
public sealed partial class CP14DamageableByMapComponent : Component
{
[DataField, AutoPausedField]
public TimeSpan NextDamageTime = TimeSpan.Zero;
[DataField]
public bool Enabled = false;
[DataField]
public EntityUid? CurrentMap;
}

View File

@@ -1,24 +0,0 @@
using Content.Shared.Damage;
using Content.Shared.FixedPoint;
namespace Content.Server._CP14.MapDamage;
/// <summary>
/// The map deals damage to entities that are on it (not on the grid)
/// </summary>
[RegisterComponent]
public sealed partial class CP14MapDamageComponent : Component
{
//Damage every second
[DataField]
public DamageSpecifier Damage = new()
{
DamageDict = new Dictionary<string, FixedPoint2>()
{
{"Asphyxiation", 5}
}
};
[DataField]
public float StaminaDamage = 7f;
}

View File

@@ -1,88 +0,0 @@
using Content.Shared.Damage;
using Content.Shared.Damage.Systems;
using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
using Robust.Shared.Timing;
namespace Content.Server._CP14.MapDamage;
public sealed partial class CP14MapDamageSystem : EntitySystem
{
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly DamageableSystem _damageable = default!;
[Dependency] private readonly StaminaSystem _stamina = default!;
[Dependency] private readonly MobStateSystem _mobState = default!;
private EntityQuery<CP14MapDamageComponent> _mapQuery;
public override void Initialize()
{
base.Initialize();
_mapQuery = GetEntityQuery<CP14MapDamageComponent>();
SubscribeLocalEvent<CP14DamageableByMapComponent, EntParentChangedMessage>(OnParentChanged);
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var query = EntityQueryEnumerator<CP14DamageableByMapComponent, DamageableComponent, MobStateComponent>();
while (query.MoveNext(out var uid, out var damage, out var damageable, out var mobState))
{
if (!damage.Enabled)
continue;
if (damage.NextDamageTime > _timing.CurTime)
continue;
damage.NextDamageTime = _timing.CurTime + TimeSpan.FromSeconds(2f);
if (damage.CurrentMap is null)
continue;
if (!_mobState.IsAlive(uid, mobState))
continue;
if (!_mapQuery.TryComp(damage.CurrentMap.Value, out var mapDamage))
continue;
_damageable.TryChangeDamage(uid, mapDamage.Damage, damageable: damageable);
_stamina.TakeStaminaDamage(uid, mapDamage.StaminaDamage);
}
}
private void OnParentChanged(Entity<CP14DamageableByMapComponent> ent, ref EntParentChangedMessage args)
{
DisableDamage(ent);
if (args.OldParent == null || TerminatingOrDeleted(ent))
return;
var newParent = _transform.GetParentUid(ent);
if (!TryComp<CP14MapDamageComponent>(newParent, out var mapDamage))
return;
EnableDamage(ent, (newParent, mapDamage));
}
private void DisableDamage(Entity<CP14DamageableByMapComponent> ent)
{
if (!ent.Comp.Enabled)
return;
ent.Comp.Enabled = false;
ent.Comp.CurrentMap = null;
Dirty(ent);
}
private void EnableDamage(Entity<CP14DamageableByMapComponent> ent, Entity<CP14MapDamageComponent> map)
{
if (ent.Comp.Enabled)
return;
ent.Comp.Enabled = true;
ent.Comp.CurrentMap = map;
Dirty(ent);
}
}

View File

@@ -24,7 +24,7 @@ public sealed partial class SunShadowCycleComponent : Component
/// <summary>
/// Time to have each direction applied. Will lerp from the current value to the next one.
/// </summary>
[DataField, AutoNetworkedField]
[AutoNetworkedField] //CP14 Remove DataField
public List<(float Ratio, Vector2 Direction, float Alpha)> Directions = new()
{
(0f, new Vector2(0f, 3f), 0f),

View File

@@ -6,12 +6,11 @@ namespace Content.Shared.Movement.Systems;
/// <summary>
/// Applies an occlusion shader for any relevant entities.
/// </summary>
public abstract partial class SharedFloorOcclusionSystem : EntitySystem //CP14 partial
public abstract class SharedFloorOcclusionSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
CP14InitializeMapOccluder(); //CP14
SubscribeLocalEvent<FloorOccluderComponent, StartCollideEvent>(OnStartCollide);
SubscribeLocalEvent<FloorOccluderComponent, EndCollideEvent>(OnEndCollide);

View File

@@ -2,7 +2,7 @@ using System.Numerics;
using Robust.Shared.GameStates;
using Robust.Shared.Utility;
namespace Content.Shared._CP14.DayCycle.Components;
namespace Content.Shared._CP14.CloudShadow;
/// <summary>
/// If added to the map, renders cloud shadows on the map

View File

@@ -1,57 +0,0 @@
using Content.Shared._CP14.DayCycle.Components;
using Content.Shared._CP14.DayCycle.Prototypes;
using Content.Shared.Storage.Components;
using Content.Shared.Weather;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.DayCycle;
public abstract class CP14SharedDayCycleSystem : EntitySystem
{
private static readonly ProtoId<CP14DayCyclePeriodPrototype> DayPeriod = "Day";
[Dependency] private readonly SharedMapSystem _maps = default!;
[Dependency] private readonly SharedWeatherSystem _weather = default!;
private EntityQuery<MapGridComponent> _mapGridQuery;
public override void Initialize()
{
base.Initialize();
_mapGridQuery = GetEntityQuery<MapGridComponent>();
}
/// <summary>
/// Checks to see if the specified entity is on the map where it's daytime.
/// </summary>
/// <param name="target">An entity being tested to see if it is in daylight</param>
/// <param name="checkRoof">Checks if the tile covers the weather (the only "roof" factor at the moment)</param>
public bool UnderSunlight(EntityUid target)
{
if (HasComp<InsideEntityStorageComponent>(target))
return false;
var xform = Transform(target);
if (!TryComp<CP14DayCycleComponent>(xform.MapUid, out var dayCycle))
return false;
var day = dayCycle.CurrentPeriod == DayPeriod;
if (!TryComp<MapGridComponent>(xform.GridUid, out var mapGrid))
return day;
var grid = xform.GridUid;
if (grid is null)
return day;
if (!_mapGridQuery.TryComp(grid, out var gridComp))
return day;
if (!_weather.CanWeatherAffect(grid.Value, gridComp, _maps.GetTileRef(xform.GridUid.Value, mapGrid, xform.Coordinates)))
return false;
return day;
}
}

View File

@@ -1,87 +0,0 @@
using Content.Shared._CP14.DayCycle.Prototypes;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared._CP14.DayCycle.Components;
/// <summary>
/// Stores all the necessary data for the day and night cycle system to work.
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause, Access(typeof(CP14SharedDayCycleSystem))]
public sealed partial class CP14DayCycleComponent : Component
{
[ViewVariables]
public int NextTimeEntryIndex
{
get
{
if (IndexedCycle is null)
return 0;
return CurrentTimeEntryIndex + 1 >= IndexedCycle.TimeEntries.Count ? 0 : CurrentTimeEntryIndex + 1;
}
}
[ViewVariables]
public DayCycleEntry? CurrentTimeEntry => IndexedCycle?.TimeEntries[CurrentTimeEntryIndex];
[ViewVariables]
public DayCycleEntry? NextCurrentTimeEntry => IndexedCycle?.TimeEntries[NextTimeEntryIndex];
[ViewVariables]
public Color? StartColor => CurrentTimeEntry?.Color;
[ViewVariables]
public Color? EndColor => NextCurrentTimeEntry?.Color;
[ViewVariables]
public ProtoId<CP14DayCyclePeriodPrototype>? CurrentPeriod => CurrentTimeEntry?.Period;
public CP14DayCyclePrototype? IndexedCycle;
[DataField, AutoNetworkedField]
public ProtoId<CP14DayCyclePrototype> CycleProto = "Default";
[DataField, ViewVariables, AutoNetworkedField]
public int CurrentTimeEntryIndex;
[DataField, ViewVariables, AutoNetworkedField, AutoPausedField]
public TimeSpan EntryStartTime;
[DataField, ViewVariables, AutoNetworkedField, AutoPausedField]
public TimeSpan EntryEndTime;
[DataField]
public bool StartWithRandomEntry = true;
}
[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>
[DataField]
public Color Color { get; init; } = Color.White;
/// <summary>
/// Duration of color shift to the next time of day
/// </summary>
[DataField]
public TimeSpan Duration { get; init; } = TimeSpan.FromSeconds(60);
[DataField]
public ProtoId<CP14DayCyclePeriodPrototype> Period { get; init; } = "Day";
}
/// <summary>
/// Event raised on map entity, wen day cycle changed.
/// </summary>
[ByRefEvent]
public readonly record struct DayCycleChangedEvent(DayCycleEntry? Entry);

View File

@@ -1,13 +0,0 @@
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.DayCycle.Prototypes;
[Prototype("CP14DayCyclePeriod")]
public sealed class CP14DayCyclePeriodPrototype : IPrototype
{
[IdDataField]
public string ID { get; } = string.Empty;
[DataField(required: true)]
public LocId Name = default!;
}

View File

@@ -1,14 +0,0 @@
using Content.Shared._CP14.DayCycle.Components;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.DayCycle.Prototypes;
[Prototype("CP14DayCycle")]
public sealed class CP14DayCyclePrototype : IPrototype
{
[IdDataField]
public string ID { get; } = string.Empty;
[DataField(required: true), ViewVariables]
public List<DayCycleEntry> TimeEntries = new();
}

View File

@@ -1,3 +1,4 @@
using Content.Shared.Destructible.Thresholds;
using Content.Shared.Procedural;
using Content.Shared.Tag;
using Robust.Shared.Prototypes;
@@ -13,10 +14,10 @@ public sealed partial class CP14DemiplaneLocationPrototype : IPrototype
[IdDataField] public string ID { get; } = default!;
/// <summary>
/// Location Tier. Can be generated only in demiplane keys with the corresponding tier
/// The difficulty levels at which this location can be generated.
/// </summary>
[DataField]
public int Tier = 1;
public MinMax Levels = new(1, 10);
[DataField(required: true)]
public ProtoId<DungeonConfigPrototype> LocationConfig;

View File

@@ -1,3 +1,4 @@
using Content.Shared.Destructible.Thresholds;
using Content.Shared.Procedural;
using Content.Shared.Tag;
using Robust.Shared.Prototypes;
@@ -13,10 +14,10 @@ public sealed partial class CP14DemiplaneModifierPrototype : IPrototype
[IdDataField] public string ID { get; } = default!;
/// <summary>
/// Modifier Tier. Can be generated only in demiplane keys with the corresponding tier
/// The difficulty levels at which this modifier can be generated.
/// </summary>
[DataField]
public List<int> Tiers = new();
public MinMax Levels = new(1, 10);
/// <summary>
/// Each modifier belongs to specific categories. Used by the generator to determine what to generate

View File

@@ -23,6 +23,9 @@ public sealed partial class CP14MagicEnergyPhotosynthesisComponent : Component
[DataField]
public float Delay = 3f;
[DataField]
public float LightThreshold = 100f;
/// <summary>
/// the time of the next magic energy change
/// </summary>

View File

@@ -1,34 +0,0 @@
using Content.Shared._CP14.DayCycle;
using Content.Shared._CP14.DayCycle.Components;
using Content.Shared._CP14.DayCycle.Prototypes;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.MagicRitual.Requirements;
/// <summary>
/// Requires specific daytime
/// </summary>
public sealed partial class RequiredTime : CP14RitualRequirement
{
[DataField]
public ProtoId<CP14DayCyclePeriodPrototype> TimePeriod;
public override string? GetGuidebookRequirementDescription(IPrototypeManager prototype, IEntitySystemManager entSys)
{
if (!prototype.TryIndex(TimePeriod, out var indexed))
return null;
return Loc.GetString("cp14-ritual-required-time", ("period", Loc.GetString(indexed.Name)));
}
public override bool Check(EntityManager entManager, Entity<CP14MagicRitualPhaseComponent> phaseEnt, float stability)
{
var transform = entManager.System<SharedTransformSystem>();
var map = transform.GetMap(phaseEnt.Owner);
if (!entManager.TryGetComponent<CP14DayCycleComponent>(map, out var dayCycle))
return false;
return TimePeriod == dayCycle.CurrentPeriod;
}
}

View File

@@ -1,31 +0,0 @@
using Content.Shared.Movement.Components;
namespace Content.Shared.Movement.Systems;
public abstract partial class SharedFloorOcclusionSystem
{
[Dependency] private readonly SharedTransformSystem _transform = default!;
private void CP14InitializeMapOccluder()
{
SubscribeLocalEvent<FloorOcclusionComponent, EntParentChangedMessage>(OnParentChanged);
}
private void OnParentChanged(Entity<FloorOcclusionComponent> ent, ref EntParentChangedMessage args)
{
if (args.OldParent == null || TerminatingOrDeleted(ent))
return;
if (ent.Comp.Colliding.Contains(args.OldParent.Value))
ent.Comp.Colliding.Remove(args.OldParent.Value);
var newParent = _transform.GetParentUid(ent);
if (HasComp<CP14MapFloorOccluderComponent>(newParent))
{
if (!ent.Comp.Colliding.Contains(newParent))
ent.Comp.Colliding.Add(newParent);
}
Dirty(ent);
SetEnabled(ent);
}
}

View File

@@ -1,12 +0,0 @@
using Robust.Shared.GameStates;
namespace Content.Shared.Movement.Components;
/// <summary>
/// Applies floor occlusion to any <see cref="FloorOcclusionComponent"/> that reparent to this map entity.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class CP14MapFloorOccluderComponent : Component
{
}

View File

@@ -1,8 +1,5 @@
using Content.Shared._CP14.DayCycle;
using Content.Shared._CP14.DayCycle.Components;
using Content.Shared._CP14.DayCycle.Prototypes;
using Content.Shared.Random.Rules;
using Robust.Shared.Prototypes;
using Robust.Shared.Map.Components;
namespace Content.Shared._CP14.Random.Rules;
@@ -11,16 +8,20 @@ namespace Content.Shared._CP14.Random.Rules;
/// </summary>
public sealed partial class CP14TimePeriod : RulesRule
{
[DataField] private List<ProtoId<CP14DayCyclePeriodPrototype>> Periods = new();
[DataField]
public float Threshold = 100f;
public override bool Check(EntityManager entManager, EntityUid uid)
{
var transform = entManager.System<SharedTransformSystem>();
var map = transform.GetMap(uid);
if (!entManager.TryGetComponent<CP14DayCycleComponent>(map, out var dayCycle))
if (!entManager.TryGetComponent<MapLightComponent>(map, out var light))
return false;
return dayCycle.CurrentPeriod is not null && Periods.Contains(dayCycle.CurrentPeriod.Value);
var lightColor = light.AmbientLightColor;
var medium = lightColor.R + lightColor.G + lightColor.B / 3f;
return medium > Threshold;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@ meta:
time: 03/03/2025 20:01:58
entityCount: 467
maps:
- 1
- 2
grids:
- 2
orphans: []
@@ -28,7 +28,7 @@ tilemap:
entities:
- proto: ""
entities:
- uid: 1
- uid: 2
components:
- type: MetaData
name: Map Entity
@@ -39,10 +39,24 @@ entities:
- type: GridTree
- type: MovedGrids
- type: Broadphase
- type: OccluderTree
- type: Roof
data: {}
- type: CP14CloudShadows
- type: CP14MapFloorOccluder
- type: MapLight
- type: LightCycle
- type: SunShadow
- type: SunShadowCycle
- type: Biome
forcedMarkerLayers: []
markerLayers: []
loadedMarkers: {}
pendingMarkers: {}
loadedChunks: []
entities: {}
decals: {}
modifiedTiles: {}
template: CP14SandOceanFill
layers: []
- type: MapAtmosphere
space: False
mixture:
@@ -62,23 +76,8 @@ entities:
- 0
- 0
- 0
- type: CP14DayCycle
- type: Gravity
gravityShakeSound: !type:SoundPathSpecifier
path: /Audio/Effects/alert.ogg
inherent: True
enabled: True
- type: Parallax
parallax: CP14Ocean
- uid: 2
components:
- type: MetaData
name: grid
- type: Transform
parent: 1
- type: BecomesStation
id: Dev
- type: Roof
- type: MapGrid
chunks:
0,0:
@@ -113,7 +112,6 @@ entities:
ind: 0,-2
tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
version: 6
- type: Broadphase
- type: Physics
bodyStatus: InAir
angularDamping: 0.05
@@ -129,131 +127,12 @@ entities:
- type: Gravity
gravityShakeSound: !type:SoundPathSpecifier
path: /Audio/Effects/alert.ogg
inherent: True
enabled: True
- type: DecalGrid
chunkCollection:
version: 2
nodes: []
- type: GridAtmosphere
version: 2
data:
tiles:
0,0:
0: 65521
0,-1:
0: 65535
-1,0:
0: 65535
0,1:
0: 61951
-1,1:
0: 65535
0,2:
0: 65519
-1,2:
0: 65519
1,0:
0: 65520
1,1:
0: 61695
1,2:
0: 65535
1,-1:
0: 65535
2,0:
0: 65455
2,1:
0: 65455
2,2:
0: 30591
2,-1:
0: 65535
3,0:
0: 4368
0,-4:
0: 61440
0,-3:
0: 65535
-1,-4:
0: 32768
-1,-3:
0: 65535
0,-2:
0: 65519
-1,-2:
0: 65519
-1,-1:
0: 65535
1,-4:
0: 12288
1,-3:
0: 65535
1,-2:
0: 65407
2,-3:
0: 4368
2,-2:
0: 29489
3,-1:
0: 272
-4,-3:
0: 65256
-4,-2:
0: 65535
-5,-2:
0: 35968
-4,-1:
0: 61439
-5,-1:
0: 8
-4,0:
0: 65535
-3,-3:
0: 65523
-3,-2:
0: 65535
-3,-1:
0: 65535
-3,0:
0: 65521
-2,-3:
0: 65534
-2,-2:
0: 65535
-2,-1:
0: 65535
-5,0:
0: 2176
-4,1:
0: 61166
-4,2:
0: 61166
-3,1:
0: 61951
-3,2:
0: 65535
-2,0:
0: 65520
-2,1:
0: 61695
-2,2:
0: 65535
uniqueMixes:
- volume: 2500
temperature: 293.15
moles:
- 21.824879
- 82.10312
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
chunkSize: 4
- type: GasTileOverlay
- type: RadiationGridResistance
- type: GravityShake

View File

@@ -50,7 +50,6 @@ entities:
- type: Broadphase
- type: OccluderTree
- type: CP14CloudShadows
- type: CP14MapFloorOccluder
- type: MapLight
- type: MapAtmosphere
space: False
@@ -71,13 +70,12 @@ entities:
- 0
- 0
- 0
- type: CP14DayCycle
- type: LightCycle
- type: CP14WeatherController
entries:
- visuals: CP14Mist
- visuals: CP14Rain
- visuals: CP14Storm
- type: CP14MapDamage
- type: LoadedMap
- type: Parallax
parallax: CP14Ocean

View File

@@ -25,7 +25,6 @@ entities:
- type: Broadphase
- type: OccluderTree
- type: CP14CloudShadows
- type: CP14MapFloorOccluder
- type: MapLight
- type: MapAtmosphere
space: False
@@ -46,7 +45,7 @@ entities:
- 0
- 0
- 0
- type: CP14DayCycle
- type: LightCycle
- type: Gravity
gravityShakeSound: !type:SoundPathSpecifier
path: /Audio/Effects/alert.ogg

View File

@@ -25,7 +25,7 @@ entities:
- type: OccluderTree
- type: CP14CloudShadows
- type: MapLight
- type: CP14DayCycle
- type: LightCycle
- type: Gravity
gravityShakeSound: !type:SoundPathSpecifier
path: /Audio/Effects/alert.ogg

View File

@@ -1,33 +0,0 @@
- type: CP14DayCycle #
id: Default
timeEntries:
- color: '#754A4A' #Dawn
duration: 145
- color: '#E0BA87' #
duration: 145
- color: '#BFEEFF' #Day
duration: 145
- color: '#385163' #Evening
duration: 145
period: Night
- color: '#060D12' #Night
duration: 80
period: Night
- color: '#000000' #BLACK NIGHT
duration: 160
period: Night
- color: '#120906' #Night
duration: 80
period: Night
- type: CP14DayCycle
id: CP14DemiplaneEternalDay
timeEntries:
- color: '#754A4A' #Dawn
duration: 145
- color: '#E0BA87' #
duration: 145
- color: '#BFEEFF' #Day
duration: 145
- color: '#385163' #Evening
duration: 145

View File

@@ -1,15 +0,0 @@
- type: CP14DayCyclePeriod
id: Sunrise
name: cp14-daycycle-sunrise
- type: CP14DayCyclePeriod
id: Day
name: cp14-daycycle-day
- type: CP14DayCyclePeriod
id: Night
name: cp14-daycycle-night
- type: CP14DayCyclePeriod
id: Evening
name: cp14-daycycle-evening

View File

@@ -226,7 +226,6 @@
weightlessAcceleration: 0.8 # Slow swimming
weightlessFriction: 2
weightlessModifier: 0.6
- type: CP14DamageableByMap
- type: Hunger
starvationDamage:
types:

View File

@@ -73,13 +73,13 @@
spawned:
- id: CP14FoodMeatHuman # Replace it with silva meat, heh.
amount: 5
- type: CP14MagicEnergyPhotosynthesis # Silva special feature
#- type: CP14MagicEnergyPhotosynthesis # Silva special feature #Disabled until sunlight fixed
- type: CP14SpellStorage
grantAccessToSelf: true
spells:
- CP14ActionSpellPlantGrowthSilva
- type: CP14MagicEnergyDraw
enable: false
#- type: CP14MagicEnergyDraw #Enabled default mana regen until sunlight fixed
# enable: false
- type: Body
prototype: CP14Silva
requiredLegs: 2

View File

@@ -21,11 +21,10 @@
- type: entity
id: CP14DemiplaneKeyT1
parent: CP14BaseSubdimensionalKey
suffix: T1
suffix: Level 3
components:
- type: CP14DemiplaneGeneratorData
tiersContent:
1: 1
level: 3
limits:
Reward: 1
Danger: 1
@@ -39,16 +38,14 @@
- type: entity
id: CP14DemiplaneKeyT2
parent: CP14BaseSubdimensionalKey
suffix: T2
suffix: Level 6
components:
- type: Sprite
layers:
- state: core
color: red
- type: CP14DemiplaneGeneratorData
tiersContent:
1: 0.6 # We dont have lot t2 content now. In future, decrease to 0.33
2: 1
level: 6
limits:
Reward: 1
Danger: 1
@@ -57,31 +54,4 @@
MapLight: 1
selectedModifiers:
- EntryRoom
- Exit
- type: entity
id: CP14DemiplaneKeyOmega
parent: CP14BaseSubdimensionalKey
suffix: Omega
components:
- type: Sprite
scale: 2, 2
layers:
- state: core
color: red
- type: CP14DemiplaneGeneratorData
tiersContent:
1: 0.6 # We dont have lot t2 content now. In future, decrease to 0.33
2: 1
limits:
Reward: 5
Danger: 5
Fun: 1
Weather: 1
MapLight: 1
location: T1OmegaTest
autoRifts:
- CP14DemiplanePassway
selectedModifiers:
- EntryRoom
- Exit

View File

@@ -1,6 +1,6 @@
- type: entity
parent: BaseStructure
id: CP14FloorWater
id: CP14FloorWaterOptimized
name: water
description: A trough of plain water. Clean enough for consumption
categories: [ ForkFiltered ]
@@ -48,6 +48,24 @@
collection: FootstepWater
params:
volume: 8
- type: Tag
tags:
- HideContextMenu
- CP14AmbientWater
- type: StepTrigger
requiredTriggeredSpeed: 0
intersectRatio: 0.1
blacklist:
tags:
- Catwalk
- type: TileEntityEffect
effects:
- !type:ExtinguishReaction
- type: entity
parent: CP14FloorWaterOptimized
id: CP14FloorWater
components:
- type: DrawableSolution
solution: pool
- type: SolutionContainerManager
@@ -61,19 +79,6 @@
solution: pool
- type: Drink
solution: pool
- type: Tag
tags:
- HideContextMenu
- CP14AmbientWater
- type: StepTrigger
requiredTriggeredSpeed: 0
intersectRatio: 0.1
blacklist:
tags:
- Catwalk # Если ты проходишь по мостику над водой, то ты не должен потушится
- type: TileEntityEffect
effects:
- !type:ExtinguishReaction
- type: RandomSpawner
prototypes:
- CP14GatherableChromiumSlime

View File

@@ -1,17 +0,0 @@
- type: dungeonConfig
id: CP14DemiplanePlatingMaskBorder
layers:
- !type:NoiseDistanceDunGen
size: 140, 140
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 1
layers:
- tile: Plating
threshold: 0.50
noise:
frequency: 0.010
noiseType: OpenSimplex2
fractalType: FBm
octaves: 5
lacunarity: 2
gain: 0.5

View File

@@ -1,139 +0,0 @@
- type: cp14DemiplaneLocation
id: T1OmegaTest
tier: 1
locationConfig: CP14OmegaTest
name: cp14-demiplane-location-cave
tags:
- CP14DemiplaneOres
- CP14DemiplaneUnderground
- CP14DemiplaneHerbals
- CP14DemiplaneWater
- CP14DemiplaneAnimalsSwamp
- type: dungeonConfig
id: CP14OmegaTest
layers:
#Masks
- !type:PrototypeDunGen
proto: CP14DemiplaneOmegaPlatingMaskBorder
- !type:PrototypeDunGen
proto: CP14DemiplaneOmegaCavesFloorMaskStone
- !type:PrototypeDunGen
proto: CP14DemiplaneOmegaCavesFloorMaskAir
- !type:PrototypeDunGen
proto: CP14DemiplaneOmegaCavesFloorMaskAir2
- !type:PrototypeDunGen
proto: CP14DemiplaneOmegaCavesFloorMaskAir3
# Biomes
- !type:BiomeDunGen
biomeTemplate: CP14CavesIndestructibleFill
tileMask:
- Plating
- !type:BiomeDunGen
biomeTemplate: CP14CavesGeneric
tileMask:
- CP14FloorSand
- !type:BiomeDunGen
biomeTemplate: CP14Grassland
tileMask:
- CP14FloorGrass
- !type:BiomeDunGen
biomeTemplate: CP14LeafMaze
tileMask:
- CP14FloorSnow
- !type:BiomeDunGen
biomeTemplate: CP14SwampFill
tileMask:
- CP14FloorGrassTall
- type: dungeonConfig
id: CP14DemiplaneOmegaPlatingMaskBorder
layers:
- !type:NoiseDistanceDunGen
size: 260, 260
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 1
layers:
- tile: Plating
threshold: 0.50
noise:
frequency: 0.010
noiseType: OpenSimplex2
fractalType: FBm
octaves: 5
lacunarity: 2
gain: 0.5
- type: dungeonConfig
id: CP14DemiplaneOmegaCavesFloorMaskStone
layers:
- !type:NoiseDistanceDunGen
size: 200, 200
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: CP14DemiplaneOmegaCavesFloorMaskAir
layers:
- !type:NoiseDistanceDunGen
size: 100, 100
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.7
layers:
- tile: CP14FloorGrass
threshold: 0.60
noise:
frequency: 0.020
noiseType: OpenSimplex2
fractalType: FBm
octaves: 5
lacunarity: 2
gain: 0.5
- type: dungeonConfig
id: CP14DemiplaneOmegaCavesFloorMaskAir2
layers:
- !type:NoiseDistanceDunGen
size: 80, 80
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.5
layers:
- tile: CP14FloorSnow
threshold: 0.50
noise:
frequency: 0.030
noiseType: OpenSimplex2
fractalType: FBm
octaves: 5
lacunarity: 2
gain: 0.5
- type: dungeonConfig
id: CP14DemiplaneOmegaCavesFloorMaskAir3
layers:
- !type:NoiseDistanceDunGen
size: 100, 100
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.4
layers:
- tile: CP14FloorGrassTall
threshold: 0.50
noise:
frequency: 0.045
noiseType: OpenSimplex2
fractalType: FBm
octaves: 5
lacunarity: 2
gain: 0.5

View File

@@ -1,27 +1,26 @@
- type: cp14DemiplaneLocation
id: T1Caves
tier: 1
levels:
min: 1
max: 4
locationConfig: CP14DemiplaneCaves
name: cp14-demiplane-location-cave
tags:
- CP14DemiplaneOres
- CP14DemiplaneUnderground
components:
- type: Biome
template: CP14CavesIndestructibleFill
- type: dungeonConfig
id: CP14DemiplaneCaves
layers:
# Masks
- !type:PrototypeDunGen
proto: CP14DemiplanePlatingMaskBorder
- !type:PrototypeDunGen
proto: CP14DemiplaneCavesFloorMaskStone
- !type:PrototypeDunGen
proto: CP14DemiplaneCavesFloorMaskAir
# Biomes
- !type:BiomeDunGen
biomeTemplate: CP14CavesIndestructibleFill
tileMask:
- Plating
- !type:BiomeDunGen
biomeTemplate: CP14CavesGeneric
tileMask:

View File

@@ -1,6 +1,8 @@
- type: cp14DemiplaneLocation
id: T1GrasslandIsland
tier: 1
levels:
min: 1
max: 4
locationConfig: CP14DemiplaneGrasslandIsland
name: cp14-demiplane-location-grassland-island
tags:
@@ -11,11 +13,12 @@
components:
- type: MapLight
ambientLightColor: "#BFEEFFFF"
- type: CP14MapFloorOccluder
- type: CP14MapDamage
- type: Parallax
parallax: CP14Ocean
- type: CP14CloudShadows
- type: Biome
template: CP14IceOceanFill
- type: SunShadow
- type: SunShadowCycle
- type: Roof
- type: dungeonConfig
id: CP14DemiplaneGrasslandIsland

View File

@@ -1,28 +1,27 @@
- type: cp14DemiplaneLocation
id: T1IceCaves
tier: 1
levels:
min: 1
max: 10
locationConfig: CP14DemiplaneIceCaves
name: cp14-demiplane-location-ice-cave
tags:
- CP14DemiplaneOres
- CP14DemiplaneUnderground
- CP14DemiplaneCold
components:
- type: Biome
template: CP14IceChasmFill
- type: dungeonConfig
id: CP14DemiplaneIceCaves
layers:
# Masks
- !type:PrototypeDunGen
proto: CP14DemiplanePlatingMaskBorder
- !type:PrototypeDunGen
proto: CP14DemiplaneCavesFloorMaskStone
- !type:PrototypeDunGen
proto: CP14DemiplaneCavesFloorMaskAir
# Biomes
- !type:BiomeDunGen
biomeTemplate: CP14CavesIndestructibleFill
tileMask:
- Plating
- !type:BiomeDunGen
biomeTemplate: CP14IceCavesGeneric
tileMask:

View File

@@ -1,6 +1,8 @@
- type: cp14DemiplaneLocation
id: T1SnowIsland
tier: 1
levels:
min: 1
max: 10
locationConfig: CP14DemiplaneSnowIsland
name: cp14-demiplane-location-snow-island
tags:
@@ -11,11 +13,12 @@
components:
- type: MapLight
ambientLightColor: "#BFEEFFFF"
- type: CP14MapFloorOccluder
- type: CP14MapDamage
- type: Parallax
parallax: CP14Ocean
- type: CP14CloudShadows
- type: Biome
template: CP14IceOceanFill
- type: SunShadow
- type: SunShadowCycle
- type: Roof
- type: dungeonConfig
id: CP14DemiplaneSnowIsland

View File

@@ -1,19 +1,22 @@
- type: cp14DemiplaneLocation
id: T1CavesRing
tier: 2
levels:
min: 3
max: 6
locationConfig: CP14DemiplaneCavesRing
name: cp14-demiplane-location-cave
tags:
- CP14DemiplaneOres
- CP14DemiplaneUnderground
- CP14DemiplanePeacefulAnimals
components:
- type: Biome
template: CP14LavaOceanFill
- type: dungeonConfig
id: CP14DemiplaneCavesRing
layers:
# Masks
- !type:PrototypeDunGen
proto: CP14DemiplanePlatingMaskBorder
- !type:PrototypeDunGen
proto: CP14DemiplaneCavesRingFloorMaskStone
- !type:PrototypeDunGen
@@ -23,10 +26,6 @@
- !type:PrototypeDunGen
proto: CP14DemiplaneCavesRingFloorMaskBorderCenter
# Biomes
- !type:BiomeDunGen
biomeTemplate: CP14CavesIndestructibleFill
tileMask:
- Plating
- !type:BiomeDunGen
biomeTemplate: CP14CavesGeneric
tileMask:
@@ -96,9 +95,9 @@
- !type:NoiseDistanceDunGen
size: 50, 50
distanceConfig: !type:DunGenEuclideanSquaredDistance
blendWeight: 0.9
blendWeight: 0.8
layers:
- tile: Plating
- tile: Space
threshold: 0.50
noise:
frequency: 0.010

View File

@@ -1,6 +1,8 @@
- type: cp14DemiplaneLocation
id: T1SwampGeode
tier: 1
levels:
min: 4
max: 10
locationConfig: CP14DemiplaneSwampGeode
name: cp14-demiplane-location-cave-grass
tags:
@@ -14,17 +16,11 @@
id: CP14DemiplaneSwampGeode
layers:
# Masks
- !type:PrototypeDunGen
proto: CP14DemiplanePlatingMaskBorder
- !type:PrototypeDunGen
proto: CP14DemiplaneGrassGeodeFloorMaskStone
- !type:PrototypeDunGen
proto: CP14DemiplaneGrassGeodeFloorMaskAir
# Biomes
- !type:BiomeDunGen
biomeTemplate: CP14CavesIndestructibleFill
tileMask:
- Plating
- !type:BiomeDunGen
biomeTemplate: CP14SwampFill
tileMask:

View File

@@ -1,6 +1,8 @@
- type: cp14DemiplaneLocation
id: T1GrasslandIslandRing
tier: 2
levels:
min: 1
max: 4
locationConfig: CP14DemiplaneGrasslandIslandRing
name: cp14-demiplane-location-grassland-island
tags:
@@ -10,11 +12,12 @@
components:
- type: MapLight
ambientLightColor: "#BFEEFFFF"
- type: CP14MapFloorOccluder
- type: CP14MapDamage
- type: Parallax
parallax: CP14Ocean
- type: CP14CloudShadows
- type: Biome
template: CP14SandOceanFill
- type: SunShadow
- type: SunShadowCycle
- type: Roof
- type: dungeonConfig
id: CP14DemiplaneGrasslandIslandRing

View File

@@ -1,6 +1,8 @@
- type: cp14DemiplaneLocation
id: T1LeafMaze
tier: 1
levels:
min: 4
max: 10
locationConfig: CP14DemiplaneLeafMaze
name: cp14-demiplane-location-leaf-maze
tags:
@@ -9,22 +11,25 @@
- CP14DemiplanePeacefulAnimals
- CP14DemiplaneWater
- CP14DemiplaneAnimalsSwamp
components:
- type: MapLight
ambientLightColor: "#BFEEFFFF"
- type: Biome
template: CP14CavesIndestructibleFill
- type: SunShadow
- type: SunShadowCycle
- type: Roof
- type: CP14CloudShadows
- type: dungeonConfig
id: CP14DemiplaneLeafMaze
layers:
# Masks
- !type:PrototypeDunGen
proto: CP14DemiplanePlatingMaskBorder
- !type:PrototypeDunGen
proto: CP14DemiplaneCavesFloorMaskStone
- !type:PrototypeDunGen
proto: CP14DemiplaneCavesFloorMaskAir
# Biomes
- !type:BiomeDunGen
biomeTemplate: CP14CavesIndestructibleFill
tileMask:
- Plating
- !type:BiomeDunGen
biomeTemplate: CP14LeafMaze
tileMask:

View File

@@ -2,10 +2,9 @@
- type: cp14DemiplaneModifier
id: Chasm
tiers:
- 1
- 2
- 3
levels:
min: 4
max: 10
name: cp14-modifier-chasm
generationWeight: 0.6
categories:
@@ -24,10 +23,9 @@
- type: cp14DemiplaneModifier
id: Lava
tiers:
- 1
- 2
- 3
levels:
min: 4
max: 10
generationWeight: 0.3
categories:
Danger: 0.33
@@ -47,9 +45,9 @@
- type: cp14DemiplaneModifier
id: Explosive
tiers:
- 2
- 3
levels:
min: 7
max: 10
name: cp14-modifier-explosive
generationWeight: 0.25
categories:
@@ -63,9 +61,9 @@
- type: cp14DemiplaneModifier
id: ShadowKudzuDebug
tiers:
- 2
- 3
levels:
min: 7
max: 10
name: cp14-modifier-shadow-kudzu
categories:
Danger: 0.3

View File

@@ -2,8 +2,9 @@
- type: cp14DemiplaneModifier
id: EnemyZombie
tiers:
- 1
levels:
min: 1
max: 4
name: cp14-modifier-zombie
generationWeight: 1.5
categories:
@@ -17,9 +18,9 @@
- type: cp14DemiplaneModifier
id: EnemyDyno
tiers:
- 1
- 2
levels:
min: 3
max: 8
name: cp14-modifier-dyno
categories:
Danger: 0.4
@@ -35,9 +36,9 @@
- type: cp14DemiplaneModifier
id: MonsterMosquito
tiers:
- 1
- 2
levels:
min: 1
max: 4
name: cp14-modifier-dyno
categories:
Danger: 0.2
@@ -52,8 +53,9 @@
- type: cp14DemiplaneModifier
id: SmallHydra
tiers:
- 1
levels:
min: 1
max: 4
name: cp14-modifier-dyno
categories:
Danger: 0.3
@@ -68,9 +70,9 @@
- type: cp14DemiplaneModifier
id: EnemySkeleton
tiers:
- 1
- 2
levels:
min: 3
max: 10
name: cp14-modifier-skeleton
generationWeight: 1.5
categories:
@@ -86,8 +88,9 @@
- type: cp14DemiplaneModifier
id: EnemyMole
tiers:
- 2
levels:
min: 6
max: 10
name: cp14-modifier-mole
categories:
Danger: 0.4
@@ -102,8 +105,9 @@
- type: cp14DemiplaneModifier
id: EnemyIceSpectre
tiers:
- 2
levels:
min: 6
max: 10
name: cp14-modifier-zombie
categories:
Danger: 0.4
@@ -118,8 +122,9 @@
- type: cp14DemiplaneModifier
id: EnemyInvisibleWhistler
tiers:
- 2
levels:
min: 6
max: 10
name: cp14-modifier-invisible-whistler
categories:
Danger: 0.4

View File

@@ -1,9 +1,8 @@
- type: cp14DemiplaneModifier
id: RoyalPumpkin
tiers:
- 1
- 2
- 3
levels:
min: 1
max: 10
generationWeight: 0.1
generationProb: 0.1
categories:
@@ -24,10 +23,9 @@
- type: cp14DemiplaneModifier
id: LucenTree
tiers:
- 1
- 2
- 3
levels:
min: 6
max: 10
generationWeight: 0.1
generationProb: 0.1
categories:
@@ -48,10 +46,9 @@
- type: cp14DemiplaneModifier
id: StatueStoneHead
tiers:
- 1
- 2
- 3
levels:
min: 2
max: 6
generationWeight: 0.1
generationProb: 0.1
categories:

View File

@@ -1,9 +1,8 @@
- type: cp14DemiplaneModifier
id: MapLightDarkness
tiers:
- 1
- 2
- 3
levels:
min: 3
max: 10
generationWeight: 2
categories:
MapLight: 1
@@ -14,9 +13,9 @@
- type: cp14DemiplaneModifier
id: MapLightDarkRed
tiers:
- 2
- 3
levels:
min: 5
max: 10
categories:
MapLight: 1
name: cp14-modifier-night
@@ -26,8 +25,9 @@
- type: cp14DemiplaneModifier
id: MapLightDarkPurple
tiers:
- 1
levels:
min: 1
max: 5
categories:
MapLight: 1
name: cp14-modifier-night
@@ -37,8 +37,9 @@
- type: cp14DemiplaneModifier
id: MapLightDarkGreen
tiers:
- 1
levels:
min: 1
max: 5
categories:
MapLight: 1
name: cp14-modifier-night
@@ -48,10 +49,9 @@
- type: cp14DemiplaneModifier
id: MapLightDarkNight
tiers:
- 1
- 2
- 3
levels:
min: 1
max: 5
categories:
MapLight: 1
name: cp14-modifier-night
@@ -63,29 +63,13 @@
- type: cp14DemiplaneModifier
id: MapLightCycleDefault
tiers:
- 1
- 2
- 3
levels:
min: 1
max: 10
categories:
MapLight: 1
generationWeight: 2
requiredTags:
- CP14DemiplaneOpenSky
components:
- type: CP14DayCycle
- type: cp14DemiplaneModifier
id: MapLightCycleDay
tiers:
- 1
- 2
- 3
categories:
MapLight: 1
generationWeight: 2
requiredTags:
- CP14DemiplaneOpenSky
components:
- type: CP14DayCycle
cycleProto: CP14DemiplaneEternalDay
- type: LightCycle

View File

@@ -1,8 +1,9 @@
- type: cp14DemiplaneModifier
id: CrystalNormal
tiers:
- 1
levels:
min: 1
max: 3
generationWeight: 0.1
categories:
Reward: 0.1
@@ -19,9 +20,9 @@
- type: cp14DemiplaneModifier
id: CrystalFire
tiers:
- 1
- 2
levels:
min: 4
max: 10
generationWeight: 0.1
categories:
Reward: 0.1
@@ -43,9 +44,9 @@
- type: cp14DemiplaneModifier
id: CrystalEarth
tiers:
- 1
- 2
levels:
min: 4
max: 10
generationWeight: 0.1
categories:
Reward: 0.1
@@ -67,9 +68,9 @@
- type: cp14DemiplaneModifier
id: CrystalWater
tiers:
- 1
- 2
levels:
min: 4
max: 10
generationWeight: 0.1
categories:
Reward: 0.1
@@ -89,9 +90,9 @@
- type: cp14DemiplaneModifier
id: CrystalAir
tiers:
- 1
- 2
levels:
min: 4
max: 10
generationWeight: 0.1
categories:
Reward: 0.1
@@ -113,9 +114,9 @@
- type: cp14DemiplaneModifier
id: CrystalOrder
tiers:
- 1
- 2
levels:
min: 4
max: 10
generationWeight: 0.1
categories:
Reward: 0.1
@@ -133,9 +134,9 @@
- type: cp14DemiplaneModifier
id: CrystalChaos
tiers:
- 1
- 2
levels:
min: 4
max: 10
generationWeight: 0.1
categories:
Reward: 0.1

View File

@@ -2,9 +2,9 @@
- type: cp14DemiplaneModifier
id: Dayflin
tiers:
- 1
- 2
levels:
min: 1
max: 10
name: cp14-modifier-dayflin
categories:
Reward: 0.1
@@ -24,9 +24,9 @@
- type: cp14DemiplaneModifier
id: FlyAgaric
tiers:
- 1
- 2
levels:
min: 1
max: 10
name: cp14-modifier-fly-agaric
categories:
Reward: 0.1
@@ -46,9 +46,9 @@
- type: cp14DemiplaneModifier
id: BlueAmanita
tiers:
- 1
- 2
levels:
min: 1
max: 10
name: cp14-modifier-blue-amanita
categories:
Reward: 0.1
@@ -67,9 +67,9 @@
- type: cp14DemiplaneModifier
id: BloodFlower
tiers:
- 1
- 2
levels:
min: 1
max: 10
name: cp14-modifier-blood-flower
categories:
Reward: 0.1
@@ -88,9 +88,9 @@
- type: cp14DemiplaneModifier
id: WildSage
tiers:
- 1
- 2
levels:
min: 1
max: 10
name: cp14-modifier-wild-sage
categories:
Reward: 0.1
@@ -110,9 +110,9 @@
- type: cp14DemiplaneModifier
id: AirLily
tiers:
- 1
- 2
levels:
min: 1
max: 10
name: cp14-modifier-air-lily
categories:
Reward: 0.1
@@ -133,8 +133,9 @@
- type: cp14DemiplaneModifier
id: LumiShroom
tiers:
- 2
levels:
min: 4
max: 10
name: cp14-modifier-lumisroom
categories:
Reward: 0.1

View File

@@ -2,8 +2,9 @@
- type: cp14DemiplaneModifier
id: LootT1
tiers:
- 1
levels:
min: 1
max: 4
generationWeight: 2
categories:
Reward: 0.35
@@ -16,9 +17,9 @@
- type: cp14DemiplaneModifier
id: Rabbits
tiers:
- 1
- 2
levels:
min: 1
max: 10
name: cp14-modifier-rabbits
generationWeight: 0.4
categories:
@@ -34,9 +35,9 @@
- type: cp14DemiplaneModifier
id: Boar
tiers:
- 1
- 2
levels:
min: 1
max: 10
name: cp14-modifier-boars
generationWeight: 0.4
categories:
@@ -52,9 +53,9 @@
- type: cp14DemiplaneModifier
id: Frog
tiers:
- 1
- 2
levels:
min: 1
max: 10
generationWeight: 0.4
categories:
Reward: 0.2
@@ -73,9 +74,9 @@
- type: cp14DemiplaneModifier
id: Sheep
tiers:
- 1
- 2
levels:
min: 1
max: 10
name: cp14-modifier-sheeps
generationWeight: 0.4
categories:
@@ -93,8 +94,9 @@
- type: cp14DemiplaneModifier
id: LootT2
tiers:
- 2
levels:
min: 5
max: 10
generationWeight: 2
categories:
Reward: 0.35

View File

@@ -2,8 +2,9 @@
- type: cp14DemiplaneModifier
id: IronOre
tiers:
- 1
levels:
min: 1
max: 10
name: cp14-modifier-iron-ore
unique: false
categories:
@@ -22,8 +23,9 @@
- type: cp14DemiplaneModifier
id: IronOreUnderground
tiers:
- 1
levels:
min: 1
max: 10
name: cp14-modifier-iron-ore
unique: false
categories:
@@ -42,8 +44,9 @@
- type: cp14DemiplaneModifier
id: CopperOre
tiers:
- 1
levels:
min: 1
max: 4
name: cp14-modifier-copper-ore
unique: false
categories:
@@ -62,8 +65,9 @@
- type: cp14DemiplaneModifier
id: CopperOreUnderground
tiers:
- 1
levels:
min: 1
max: 4
name: cp14-modifier-copper-ore
unique: false
categories:
@@ -84,8 +88,9 @@
- type: cp14DemiplaneModifier
id: GoldOre
tiers:
- 2
levels:
min: 3
max: 6
name: cp14-modifier-gold-ore
unique: false
categories:
@@ -104,8 +109,9 @@
- type: cp14DemiplaneModifier
id: GoldOreUnderground
tiers:
- 2
levels:
min: 3
max: 6
name: cp14-modifier-gold-ore
unique: false
categories:
@@ -123,9 +129,10 @@
maxGroupSize: 6
- type: cp14DemiplaneModifier
id: MithrilOre
tiers:
- 2
id: MithrilOre
levels:
min: 5
max: 10
name: cp14-modifier-mithril-ore
unique: false
categories:
@@ -144,8 +151,9 @@
- type: cp14DemiplaneModifier
id: MithrilOreUnderground
tiers:
- 2
levels:
min: 5
max: 10
name: cp14-modifier-mithril-ore
unique: false
categories:

View File

@@ -1,12 +1,11 @@
- type: cp14DemiplaneModifier
id: ArtifactRoom
tiers:
- 1
- 2
- 3
generationWeight: 0.1
levels:
min: 1
max: 10
generationWeight: 2
categories:
Reward: 0.3
Reward: 0.15
layers:
- !type:OreDunGen
entity: CP14DemiplaneArtifactRoomSpawner

View File

@@ -1,19 +1,11 @@
- type: cp14DemiplaneModifier
id: WeatherNone
tiers:
- 1
- 2
- 3
generationWeight: 3
categories:
Weather: 1
- type: cp14DemiplaneModifier
id: WeatherMist
tiers:
- 1
- 2
- 3
categories:
Weather: 1
components:
@@ -29,9 +21,6 @@
- type: cp14DemiplaneModifier
id: WeatherRain
tiers:
- 1
- 2
categories:
Weather: 1
requiredTags:
@@ -49,9 +38,9 @@
- type: cp14DemiplaneModifier
id: WeatherStorm
tiers:
- 2
- 3
levels:
min: 4
max: 10
categories:
Weather: 1
requiredTags:
@@ -69,9 +58,9 @@
- type: cp14DemiplaneModifier
id: WeatherSnowLight
tiers:
- 1
- 2
levels:
min: 1
max: 4
categories:
Weather: 1
requiredTags:
@@ -89,10 +78,6 @@
- type: cp14DemiplaneModifier
id: WeatherSnowMedium
tiers:
- 1
- 2
- 3
categories:
Weather: 1
requiredTags:
@@ -110,9 +95,9 @@
- type: cp14DemiplaneModifier
id: WeatherSnowHeavy
tiers:
- 2
- 3
levels:
min: 5
max: 10
categories:
Weather: 1
requiredTags:

View File

@@ -30,10 +30,7 @@
- type: cp14DemiplaneModifier
id: TimeLimit10
generationProb: 0.33
tiers:
- 1
- 2
generationProb: 0
name: cp14-modifier-time-limit-10
components:
- type: CP14DemiplaneTimedDestruction

View File

@@ -5,19 +5,6 @@
threshold: -1.0
tile: CP14FloorBase
- type: biomeTemplate
id: CP14CavesIndestructibleFill
layers:
- !type:BiomeTileLayer
threshold: -1.0
tile: CP14FloorBase
- !type:BiomeEntityLayer
threshold: -1
allowedTiles:
- CP14FloorBase
entities:
- CP14WallStoneIndestructable
- type: biomeTemplate
id: CP14CavesFloor
layers:

View File

@@ -0,0 +1,77 @@
- type: biomeTemplate
id: CP14CavesIndestructibleFill
layers:
- !type:BiomeTileLayer
threshold: -1.0
tile: FloorBasalt
- !type:BiomeEntityLayer
threshold: -1
allowedTiles:
- FloorBasalt
entities:
- CP14WallStoneIndestructable
- type: biomeTemplate
id: CP14ChasmFill
layers:
- !type:BiomeTileLayer
threshold: -1.0
tile: CP14FloorBase
- !type:BiomeEntityLayer
threshold: -1
allowedTiles:
- CP14FloorBase
entities:
- CP14Chasm
- type: biomeTemplate
id: CP14IceChasmFill
layers:
- !type:BiomeTileLayer
threshold: -1.0
tile: FloorSnow
- !type:BiomeEntityLayer
threshold: -1
allowedTiles:
- FloorSnow
entities:
- CP14Chasm
- type: biomeTemplate
id: CP14IceOceanFill
layers:
- !type:BiomeTileLayer
threshold: -1.0
tile: FloorSnow
- !type:BiomeEntityLayer
threshold: -1
allowedTiles:
- FloorSnow
entities:
- CP14FloorWaterOptimized
- type: biomeTemplate
id: CP14SandOceanFill
layers:
- !type:BiomeTileLayer
threshold: -1.0
tile: FloorDesert
- !type:BiomeEntityLayer
threshold: -1
allowedTiles:
- FloorDesert
entities:
- CP14FloorWaterOptimized
- type: biomeTemplate
id: CP14LavaOceanFill
layers:
- !type:BiomeTileLayer
threshold: -1.0
tile: FloorBasalt
- !type:BiomeEntityLayer
threshold: -1
allowedTiles:
- FloorBasalt
entities:
- CP14FloorLava

View File

@@ -91,9 +91,9 @@
id: NightForest
rules:
- !type:CP14TimePeriod
periods:
- Night
- Evening
#periods:
#- Night
#- Evening
- !type:NearbyTilesPercentRule
ignoreAnchored: true
percent: 0.5

View File

@@ -7,7 +7,7 @@
The Silva are a race of humanoid plants living in deep relic forests. Emerging from the mother tree in the centre of their cities, the Silvas do not travel the world very often.
## Magical photosynthesis
## Magical photosynthesis (TEMPORARILY DISABLED)
Silvas regenerate [protodata="CP14MobSilva" comp="CP14MagicEnergyPhotosynthesis" member="DaylightEnergy"/] mana while in sunlight, but without it, mana regeneration is completely absent.

View File

@@ -7,7 +7,7 @@
Сильва - раса гуманоидных растений обитающих в глубоких реликтовых лесах. Появляясь в центре своих городов из материнского дерева, Сильвы не особо часто путешествуют по миру.
## Магический фотосинтез
## Магический фотосинтез (ВРЕМЕННО ОТКЛЮЧЕНО)
Сильвы регенерируют [protodata="CP14MobSilva" comp="CP14MagicEnergyPhotosynthesis" member="DaylightEnergy"/] маны находясь под солнечным светом, но без него регенерация маны полностью отсутствует.