Compare commits

...

12 Commits

Author SHA1 Message Date
Ed
de4ffd8a5d rails 2025-03-23 00:34:16 +03:00
ArZarLordOfMango
42e3f7ce97 bone mask fix (#1050) 2025-03-22 22:52:03 +03:00
github-actions[bot]
8da5776a4e @ArZarLordOfMango has signed the CLA in crystallpunk-14/crystall-punk-14#1050 2025-03-22 19:42:23 +00:00
Viator-MV
dd6d3f8bc7 Factoria upd (#1044)
* Update factoria.yml

* fact_dung

* Update Factoria.yml

* planetarize factoria

* Update factoria.yml

* Update factoria.yml

* Update factoria_d.yml

* meh

---------

Co-authored-by: Ed <edwardxperia2000@gmail.com>
2025-03-21 22:20:12 +03:00
Ed
52e6e9b28f Carcat night vision (#1046)
* carcat night vision

* Update nightVision.yml
2025-03-21 16:53:59 +03:00
Ed
a951193dba Merge branch 'master' of https://github.com/crystallpunk-14/crystall-punk-14 2025-03-19 14:04:35 +03:00
Ed
4002b0a41c Update CP14SellWhitelistService.cs 2025-03-19 13:45:59 +03:00
Арт
709b78080f Weapon Sharpening System Update & Bread Slicing Fix (#915)
* SharpeningUpdate

* BreadSlicingFix

Before that, bread slices could be cut endlessly into new bread slices.

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2025-03-19 13:36:46 +03:00
creamybag
d71fd8ef80 jager2 (#1042) 2025-03-19 12:58:30 +03:00
Ed
1867903c46 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
2025-03-19 12:52:37 +03:00
creamybag
d7c4bc0a5c A set of "jagermeister" clothes. (#1039)
* jagermeister

* fix
2025-03-18 17:26:39 +03:00
Nim
e4eea533a5 Decorative sprite pack (#1009)
* cobweb

* statue

* demiplan fun

* flowers

* head

* head

---------

Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
2025-03-18 16:33:11 +03:00
150 changed files with 38900 additions and 36669 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

@@ -0,0 +1,65 @@
using Content.Shared._CP14.NightVision;
using Robust.Client.Player;
using Robust.Shared.Player;
namespace Content.Client._CP14.NightVision;
public sealed class CP14ClientNightVisionSystem : CP14SharedNightVisionSystem
{
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CP14NightVisionComponent, CP14ToggleNightVisionEvent>(OnToggleNightVision);
SubscribeLocalEvent<CP14NightVisionComponent, PlayerDetachedEvent>(OnPlayerDetached);
}
protected override void OnRemove(Entity<CP14NightVisionComponent> ent, ref ComponentRemove args)
{
base.OnRemove(ent, ref args);
NightVisionOff(ent);
}
private void OnPlayerDetached(Entity<CP14NightVisionComponent> ent, ref PlayerDetachedEvent args)
{
NightVisionOff(ent);
}
private void OnToggleNightVision(Entity<CP14NightVisionComponent> ent, ref CP14ToggleNightVisionEvent args)
{
NightVisionToggle(ent);
}
private void NightVisionOn(Entity<CP14NightVisionComponent> ent)
{
if (_playerManager.LocalSession?.AttachedEntity != ent)
return;
var nightVisionLight = Spawn(ent.Comp.LightPrototype, Transform(ent).Coordinates);
_transform.SetParent(nightVisionLight, ent);
_transform.SetWorldRotation(nightVisionLight, _transform.GetWorldRotation(ent));
ent.Comp.LocalLightEntity = nightVisionLight;
}
private void NightVisionOff(Entity<CP14NightVisionComponent> ent)
{
QueueDel(ent.Comp.LocalLightEntity);
ent.Comp.LocalLightEntity = null;
}
private void NightVisionToggle(Entity<CP14NightVisionComponent> ent)
{
if (ent.Comp.LocalLightEntity == null)
{
NightVisionOn(ent);
}
else
{
NightVisionOff(ent);
}
}
}

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

@@ -39,9 +39,15 @@ namespace Content.Server.Damage.Systems
{
//CrystallEdge Melee upgrade
var damage = component.Damage;
var slashDamage = damage.DamageDict.GetValueOrDefault("Slash");
var piercingDamage = damage.DamageDict.GetValueOrDefault("Piercing");
if (TryComp<CP14SharpenedComponent>(uid, out var sharp))
damage *= sharp.Sharpness;
{
damage.DamageDict["Slash"] = slashDamage * sharp.Sharpness;
damage.DamageDict["Piercing"] = piercingDamage * sharp.Sharpness;
damage.DamageDict["Blunt"] = (slashDamage + piercingDamage) / 2 * (1f - sharp.Sharpness);
}
var dmg = _damageable.TryChangeDamage(args.Target, damage * _damageable.UniversalThrownDamageModifier, component.IgnoreResistances, origin: args.Component.Thrower);
//CrystallEdge Melee upgrade end
@@ -66,11 +72,16 @@ namespace Content.Server.Damage.Systems
private void OnDamageExamine(EntityUid uid, DamageOtherOnHitComponent component, ref DamageExamineEvent args)
{
//CP14 Sharpening damage apply
var damage = component.Damage * _damageable.UniversalThrownDamageModifier;
var slashDamage = damage.DamageDict.GetValueOrDefault("Slash");
var piercingDamage = damage.DamageDict.GetValueOrDefault("Piercing");
if (TryComp<CP14SharpenedComponent>(uid, out var sharp))
damage *= sharp.Sharpness;
{
damage.DamageDict["Slash"] = slashDamage * sharp.Sharpness;
damage.DamageDict["Piercing"] = piercingDamage * sharp.Sharpness;
damage.DamageDict["Blunt"] = (slashDamage + piercingDamage) / 2 * (1f - sharp.Sharpness);
}
_damageExamine.AddDamageExamine(args.Message, damage, Loc.GetString("damage-throw"));
//CP14 Sharpening damage apply end

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

@@ -0,0 +1,7 @@
using Content.Shared._CP14.NightVision;
namespace Content.Server._CP14.NightVision;
public sealed class CP14NightVisionSystem : CP14SharedNightVisionSystem
{
}

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

@@ -1,3 +1,4 @@
using Content.Shared.Stacks;
using Content.Shared.Whitelist;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
@@ -36,8 +37,13 @@ public sealed partial class CP14SellWhitelistService : CP14StoreSellService
if (!whitelistSystem.IsValid(Whitelist, ent))
continue;
var count = 1;
if (entManager.TryGetComponent<StackComponent>(ent, out var stack))
count = stack.Count;
suitable.Add(ent);
needCount -= 1;
needCount -= count;
}
if (needCount > 0)

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

@@ -127,7 +127,12 @@ public sealed class CP14SharpeningSystem : EntitySystem
private void OnGetMeleeDamage(Entity<CP14SharpenedComponent> sharpened, ref GetMeleeDamageEvent args)
{
args.Damage *= sharpened.Comp.Sharpness;
var slashDamage = args.Damage.DamageDict.GetValueOrDefault("Slash");
var piercingDamage = args.Damage.DamageDict.GetValueOrDefault("Piercing");
args.Damage.DamageDict["Slash"] = slashDamage * sharpened.Comp.Sharpness;
args.Damage.DamageDict["Piercing"] = piercingDamage * sharpened.Comp.Sharpness;
args.Damage.DamageDict["Blunt"] = (slashDamage + piercingDamage) / 2 * (1f - sharpened.Comp.Sharpness);
}
}

View File

@@ -0,0 +1,20 @@
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.NightVision;
[RegisterComponent, NetworkedComponent]
public sealed partial class CP14NightVisionComponent : Component
{
[DataField]
public EntityUid? LocalLightEntity = null;
[DataField]
public EntProtoId LightPrototype = "CP14NightVisionLight";
[DataField]
public EntProtoId ActionPrototype = "CP14ActionToggleNightVision";
[DataField]
public EntityUid? ActionEntity = null;
}

View File

@@ -0,0 +1,28 @@
using Content.Shared.Actions;
namespace Content.Shared._CP14.NightVision;
public abstract class CP14SharedNightVisionSystem : EntitySystem
{
[Dependency] private readonly SharedActionsSystem _actions = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CP14NightVisionComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<CP14NightVisionComponent, ComponentRemove>(OnRemove);
}
private void OnMapInit(Entity<CP14NightVisionComponent> ent, ref MapInitEvent args)
{
_actions.AddAction(ent, ref ent.Comp.ActionEntity, ent.Comp.ActionPrototype);
}
protected virtual void OnRemove(Entity<CP14NightVisionComponent> ent, ref ComponentRemove args)
{
_actions.RemoveAction(ent, ent.Comp.ActionEntity);
}
}
public sealed partial class CP14ToggleNightVisionEvent : InstantActionEvent { }

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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

@@ -30,7 +30,7 @@
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
#- type: SubFloorHide #CP14
- type: SubFloorHide
- type: CollideOnAnchor
- type: Appearance
- type: Electrified

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

@@ -0,0 +1,26 @@
- type: entity
id: CP14ActionToggleNightVision
name: Toggle Night Vision
description: You begin to see the world in a special way that allows you to see even in total darkness.
components:
- type: InstantAction
icon: Interface/VerbIcons/light.svg.192dpi.png
clientExclusive: true
checkCanInteract: false
event: !type:CP14ToggleNightVisionEvent
- type: entity
id: CP14NightVisionLight
categories: [ HideSpawnMenu ]
components:
- type: Tag
tags:
- HideContextMenu
- type: PointLight
radius: 15
energy: 1.3
softness: 10
color: "#ffa38c"
netsync: false
mask: /Textures/_CP14/Effects/LightMasks/crystal_cone.png
autoRot: true

View File

@@ -31,3 +31,14 @@
Blunt: 0.99
Slash: 0.98
Piercing: 0.99
- type: entity
parent: CP14ClothingGlovesBase
id: CP14ClothingGlovesJagermeister
name: jagermeister's gloves
description: Leather gloves, a deep favourite of the local jagermeister's.
components:
- type: Sprite
sprite: _CP14/Clothing/Gloves/jagermeister_gloves.rsi
- type: Clothing
sprite: _CP14/Clothing/Gloves/jagermeister_gloves.rsi

View File

@@ -73,4 +73,15 @@
- type: Sprite
sprite: _CP14/Clothing/Head/Roles/General/jesters_cap.rsi
- type: Clothing
sprite: _CP14/Clothing/Head/Roles/General/jesters_cap.rsi
sprite: _CP14/Clothing/Head/Roles/General/jesters_cap.rsi
- type: entity
parent: CP14ClothingHeadBase
id: CP14ClothingHeadJagermeisterHat
name: jagermeister's hat
description: The mark of a professional in his field.
components:
- type: Sprite
sprite: _CP14/Clothing/Head/Roles/General/jagermeister_hat.rsi
- type: Clothing
sprite: _CP14/Clothing/Head/Roles/General/jagermeister_hat.rsi

View File

@@ -108,7 +108,7 @@
- type: entity
parent: CP14ClothingMaskBoneMask
id: CP14ClothingMaskBoneMaskMind
categories: [ DoNotMap ]
categories: [ HideSpawnMenu ]
components:
- type: BlockMovement
- type: Actions

View File

@@ -63,3 +63,16 @@
- type: Clothing
sprite: _CP14/Clothing/OuterClothing/Roles/General/brown_3.rsi
- type: entity
parent:
- ClothingSlotBase
- CP14ClothingOuterClothingBase
id: CP14ClothingOuterClothingJagermeisterWaistcoat
name: jagermeister's waistcoat
description: Doesn't interfere with movement, looks restrained. Time to go hunting.
components:
- type: Sprite
sprite: _CP14/Clothing/OuterClothing/Roles/General/jagermeister_waistcoat.rsi
- type: Clothing
sprite: _CP14/Clothing/OuterClothing/Roles/General/jagermeister_waistcoat.rsi

View File

@@ -67,4 +67,14 @@
- type: Sprite
sprite: _CP14/Clothing/Pants/Trousers/jesters_pantaloons.rsi
- type: Clothing
sprite: _CP14/Clothing/Pants/Trousers/jesters_pantaloons.rsi
sprite: _CP14/Clothing/Pants/Trousers/jesters_pantaloons.rsi
- type: entity
parent: CP14ClothingPantsBase
id: CP14ClothingPantsJagermeisterTrousers
name: jagermeister's trousers
components:
- type: Sprite
sprite: _CP14/Clothing/Pants/jagermeister_trousers.rsi
- type: Clothing
sprite: _CP14/Clothing/Pants/jagermeister_trousers.rsi

View File

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

View File

@@ -38,6 +38,7 @@
damage:
types:
Slash: 5 # 5 slash
- type: CP14NightVision #Night vision
- type: FootstepModifier
footstepSoundCollection: null # Silent footstep
- type: Inventory

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

@@ -59,7 +59,7 @@
- type: entity
id: CP14FoodBreadSlice
parent: CP14FoodBread
parent: CP14FoodDoughMedium
name: bread slice
components:
- type: Sprite

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

@@ -0,0 +1,66 @@
- type: entity
id: CP14CobwebRight1
parent:
- CP14BaseWallmount
- CP14BaseFlammable
name: cobweb
description: The sticky web is surprisingly strong and unpleasant.
categories: [ ForkFiltered ]
suffix: Right. Corner.
placement:
mode: SnapgridCenter
components:
- type: Clickable
- type: Sprite
sprite: _CP14/Structures/Decoration/cobweb.rsi
state: cobweb_right1
- type: Transform
anchored: true
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Wood
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 20
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: SpriteFade
- type: SpeedModifierContacts
walkSpeedModifier: 0.5
sprintSpeedModifier: 0.5
- type: CP14IgnitionModifier
ignitionTimeModifier: 0.75
hideCaution: true
- type: FireVisuals
sprite: Mobs/Effects/onfire.rsi
normalState: Mouse_burning # I need a burning sprite on the Wallmount
- type: entity
id: CP14CobwebLeft1
parent: CP14CobwebRight1
suffix: Left. Corner.
components:
- type: Sprite
sprite: _CP14/Structures/Decoration/cobweb.rsi
state: cobweb_left1
- type: entity
id: CP14CobwebLeft2
parent: CP14CobwebRight1
suffix: Left. Flat.
components:
- type: Sprite
sprite: _CP14/Structures/Decoration/cobweb.rsi
state: cobweb_left2
- type: entity
id: CP14CobwebRight2
parent: CP14CobwebLeft2
suffix: Right. Flat.
components:
- type: Sprite
sprite: _CP14/Structures/Decoration/cobweb.rsi
state: cobweb_right2

View File

@@ -158,7 +158,7 @@
shape:
!type:PhysShapeAabb
bounds: "-0.45,-0.45,0.45,0.45"
density: 60
density: 120
mask:
- MachineMask
layer:
@@ -213,3 +213,109 @@
map: ["ritual"]
visible: false
shader: unshaded
- type: entity
id: CP14StatueStoneHeadHigh
parent: BaseStructure
name: stone head
description: Strange stone heads, they seem to be watching.
categories: [ ForkFiltered ]
suffix: High
components:
- type: Sprite
noRot: true
sprite: _CP14/Structures/Decoration/stone_head_high.rsi
layers:
- state: statue_head_h
drawdepth: Mobs
offset: "0.0,0.5"
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.45,-0.45,0.45,0.45"
density: 200
mask:
- MachineMask
layer:
- MachineLayer
- type: Damageable
damageContainer: StructuralInorganic
damageModifierSet: Rock
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 150
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- !type:PlaySoundBehavior
sound:
path: /Audio/Effects/break_stone.ogg
params:
volume: -4
- !type:SpawnEntitiesBehavior
spawn:
CP14StoneBlock1:
min: 4
max: 5
- type: entity
id: CP14StatueStoneHeadLow
parent: CP14StatueStoneHeadHigh
suffix: Low
components:
- type: Sprite
sprite: _CP14/Structures/Decoration/stone_head_low.rsi
layers:
- state: statue_head_l
- type: entity
id: CP14StatueWizard
parent: BaseStructure
name: statue wizard
description: A statue of a magician holding magic.
categories: [ ForkFiltered ]
components:
- type: Sprite
noRot: true
sprite: _CP14/Structures/Decoration/wizard_statue.rsi
layers:
- state: statue_wizard
drawdepth: Mobs
offset: "0.0,0.5"
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.20,-0.35,0.20,0.35"
density: 100
mask:
- MachineMask
layer:
- MachineLayer
- type: SpriteFade
- type: Damageable
damageContainer: StructuralInorganic
damageModifierSet: Rock
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 110
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- !type:PlaySoundBehavior
sound:
path: /Audio/Effects/break_stone.ogg
params:
volume: -4
- !type:SpawnEntitiesBehavior
spawn:
CP14StoneBlock1:
min: 2
max: 3

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

@@ -0,0 +1,87 @@
- type: entity
id: CP14PottedPlantBase
parent: BaseStructureDynamic
name: potted plant
description: A domesticated plant in a clay pot, more plants.
abstract: true
categories: [ ForkFiltered ]
components:
- type: SpriteFade
- type: Transform
noRot: true
- type: InteractionOutline
- type: Physics
bodyType: Dynamic
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeCircle
radius: 0.1
density: 120
mask:
- HighImpassable
- type: Sprite
drawdepth: Overdoors
offset: "0.0,0.3"
noRot: true
sprite: _CP14/Structures/Furniture/flowerpots.rsi
- type: Speech
speechVerb: Plant
- type: SecretStash
tryInsertItemSound: /Audio/Effects/plant_rustle.ogg
tryRemoveItemSound: /Audio/Effects/plant_rustle.ogg
secretStashName: secret-stash-plant
- type: ContainerContainer
containers:
stash: !type:ContainerSlot {}
- type: Pullable
- type: Damageable
damageContainer: StructuralInorganic
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 50
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- !type:PlaySoundBehavior
sound:
path: /Audio/Effects/plant_rustle.ogg
- type: entity
id: CP14PottedPlant1
parent: CP14PottedPlantBase
components:
- type: Sprite
layers:
- state: pot
- state: plant1
- type: entity
id: CP14PottedPlant2
parent: CP14PottedPlantBase
components:
- type: Sprite
layers:
- state: pot
- state: plant2
- type: entity
id: CP14PottedPlant3
parent: CP14PottedPlantBase
components:
- type: Sprite
layers:
- state: pot
- state: plant3
- type: entity
id: CP14PottedPlant4
parent: CP14PottedPlantBase
components:
- type: Sprite
layers:
- state: pot
- state: plant4

View File

@@ -0,0 +1,44 @@
- type: entity
id: CP14RailBase
name: railroad
categories: [ ForkFiltered ]
description: Rails-rails, sleepers-sleepers, the train was running late.
placement:
mode: SnapgridCenter
components:
- type: PlacementReplacement
key: CP14Rail
- type: Clickable
- type: Transform
anchored: true
noRot: true
- type: Physics
bodyType: Static
canCollide: false
- type: Fixtures
- type: Sprite
drawdepth: ThinWire
sprite: _CP14/Structures/Transport/rails.rsi
state: rails_0
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Metallic
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 50
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: CollideOnAnchor
- type: Appearance
- type: CableVisualizer
statePrefix: rails_
- type: CableVis
node: power
- type: NodeContainer
nodes:
power:
!type:CableNode
#nodeGroupID: MVPower

View File

@@ -20,7 +20,7 @@
components:
- type: Sprite
offset: 1, -0.75
sprite: _CP14/Structures/Shuttle/wing_small.rsi
sprite: _CP14/Structures/Transport/wing_small.rsi
state: right
- type: entity
@@ -30,7 +30,7 @@
components:
- type: Sprite
offset: -1, -0.75
sprite: _CP14/Structures/Shuttle/wing_small.rsi
sprite: _CP14/Structures/Transport/wing_small.rsi
state: left
@@ -41,7 +41,7 @@
components:
- type: Sprite
offset: -1.75, -1.5
sprite: _CP14/Structures/Shuttle/wing_big.rsi
sprite: _CP14/Structures/Transport/wing_big.rsi
state: left
- type: entity
@@ -51,5 +51,5 @@
components:
- type: Sprite
offset: 1.75, -1.5
sprite: _CP14/Structures/Shuttle/wing_big.rsi
sprite: _CP14/Structures/Transport/wing_big.rsi
state: right

View File

@@ -70,6 +70,7 @@
- CP14ClothingOuterClothingBrownVest1
- CP14ClothingOuterClothingBrownVest2
- CP14ClothingOuterClothingBrownVest3
- CP14ClothingOuterClothingJagermeisterWaistcoat
- CP14ClothingOuterClothingRedVest
- type: loadout
@@ -92,6 +93,12 @@
equipment:
outerClothing: CP14ClothingOuterClothingRedVest
- type: loadout
id: CP14ClothingOuterClothingJagermeisterWaistcoat
equipment:
outerClothing: CP14ClothingOuterClothingJagermeisterWaistcoat
# Eyes
- type: loadoutGroup
@@ -120,12 +127,18 @@
minLimit: 0
loadouts:
- CP14Girdles
- CP14ClothingGlovesJagermeister
- type: loadout
id: CP14Girdles
equipment:
gloves: CP14ClothingGlovesGirdles
- type: loadout
id: CP14ClothingGlovesJagermeister
equipment:
gloves: CP14ClothingGlovesJagermeister
# Mask
- type: loadoutGroup
@@ -164,6 +177,7 @@
- CP14ClothingHeadTriangularHatGolden
- CP14ClothingHeadJestersCap
- CP14ClothingHeadHuntersHat
- CP14ClothingHeadJagermeisterHat
- type: loadout
id: CP14ClothingHeadMetalHeadband
@@ -190,6 +204,11 @@
equipment:
head: CP14ClothingHeadHuntersHat
- type: loadout
id: CP14ClothingHeadJagermeisterHat
equipment:
head: CP14ClothingHeadJagermeisterHat
# Pants
- type: loadoutGroup
@@ -200,6 +219,7 @@
- CP14ClothingPantsTrouserDarkBlue
- CP14ClothingPantsJestersPantaloons
- CP14ClothingPantsAristocratic
- CP14ClothingPantsJagermeisterTrousers
- CP14ClothingPantsGreen
- CP14ClothingPantsBrown
@@ -233,6 +253,11 @@
equipment:
pants: CP14ClothingPantsBrown
- type: loadout
id: CP14ClothingPantsJagermeisterTrousers
equipment:
pants: CP14ClothingPantsJagermeisterTrousers
# Shirt
- type: loadoutGroup

View File

@@ -25,8 +25,11 @@
#Guard
CP14Guard: [8, 8]
CP14GuardCommander: [1, 1]
#- type: CP14StationZLevels
# defaultMapLevel: 0
- type: CP14StationZLevels
defaultMapLevel: 0
levels:
-1:
path: /Maps/_CP14/factoria_d.yml
- type: CP14StationKeyDistribution
keys:
- Alchemy1

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:
@@ -44,4 +42,27 @@
entity: CP14BaseLucensTreeLarge
count: 10
minGroupSize: 1
maxGroupSize: 1
maxGroupSize: 1
- type: cp14DemiplaneModifier
id: StatueStoneHead
levels:
min: 2
max: 6
generationWeight: 0.1
generationProb: 0.1
categories:
Fun: 1
requiredTags:
- CP14DemiplaneOpenSky
layers:
- !type:OreDunGen
entity: CP14StatueStoneHeadHigh
count: 1
minGroupSize: 1
maxGroupSize: 1
- !type:OreDunGen
entity: CP14StatueStoneHeadLow
count: 1
minGroupSize: 1
maxGroupSize: 1

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"/] маны находясь под солнечным светом, но без него регенерация маны полностью отсутствует.

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "All right reserved",
"copyright": "Created by creamy",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-HAND",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 890 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Some files were not shown because too many files have changed in this diff Show More