Unstable demiplane update (#866)
* replace heat trigger to unsafe damage trigger * end demiplane music * timed demiplane modifier * unhardcode some values * demiplane crystal destruction waves * time limit * fixes * Update CP14UniqueLootSystem.cs * Update unstable_rift.yml * tweks * Update unstable_rift.yml
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
using Content.Shared._CP14.MagicWeakness;
|
||||
|
||||
namespace Content.Client._CP14.MagicWeakness;
|
||||
|
||||
public class CP14ClientMagicWeaknessSystem : CP14SharedMagicWeaknessSystem
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
using Content.Shared._CP14.Demiplane.Components;
|
||||
using Robust.Shared.Audio;
|
||||
|
||||
namespace Content.Server._CP14.Demiplane;
|
||||
|
||||
public sealed partial class CP14DemiplaneSystem
|
||||
{
|
||||
private void InitDestruction()
|
||||
{
|
||||
SubscribeLocalEvent<CP14DemiplaneTimedDestructionComponent, ComponentAdd>(OnDestructionStarted);
|
||||
}
|
||||
|
||||
private void OnDestructionStarted(Entity<CP14DemiplaneTimedDestructionComponent> ent, ref ComponentAdd args)
|
||||
{
|
||||
ent.Comp.EndTime = _timing.CurTime + ent.Comp.TimeToDestruction;
|
||||
ent.Comp.SelectedSong = new SoundPathSpecifier(_audio.GetSound(ent.Comp.Sound));
|
||||
}
|
||||
|
||||
private void UpdateDestruction(float frameTime)
|
||||
{
|
||||
var query = EntityQueryEnumerator<CP14DemiplaneTimedDestructionComponent, CP14DemiplaneComponent>();
|
||||
while (query.MoveNext(out var uid, out var destruction, out var demiplane))
|
||||
{
|
||||
var remaining = destruction.EndTime - _timing.CurTime;
|
||||
|
||||
if (destruction.SelectedSong is null)
|
||||
continue;
|
||||
|
||||
var audioLength = _audio.GetAudioLength(destruction.SelectedSong.Path.ToString());
|
||||
|
||||
if (destruction.Stream is null && remaining < audioLength)
|
||||
{
|
||||
var audio = _audio.PlayPvs(destruction.Sound, uid);
|
||||
destruction.Stream = audio?.Entity;
|
||||
_audio.SetMapAudio(audio);
|
||||
Dirty(uid, destruction);
|
||||
DemiplaneAnnounce(uid, Loc.GetString("cp14-demiplane-countdown", ("duration", audioLength.Minutes)));
|
||||
}
|
||||
|
||||
if (remaining <= TimeSpan.Zero)
|
||||
{
|
||||
_audio.Stop(destruction.Stream);
|
||||
DeleteDemiplane((uid, demiplane));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,8 +5,6 @@ namespace Content.Server._CP14.Demiplane;
|
||||
|
||||
public sealed partial class CP14DemiplaneSystem
|
||||
{
|
||||
[Dependency] private readonly ChatSystem _chat = default!;
|
||||
|
||||
private void InitEchoes()
|
||||
{
|
||||
SubscribeLocalEvent<EntitySpokeEvent>(OnSpeak);
|
||||
|
||||
@@ -248,26 +248,13 @@ public sealed partial class CP14DemiplaneSystem
|
||||
foreach (var modifier in _proto.EnumeratePrototypes<CP14DemiplaneModifierPrototype>())
|
||||
{
|
||||
var passed = true;
|
||||
//Tag blacklist filter
|
||||
foreach (var configTag in selectedConfig.Tags)
|
||||
{
|
||||
if (modifier.BlacklistTags.Count != 0 && modifier.BlacklistTags.Contains(configTag))
|
||||
{
|
||||
passed = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//Tag required filter
|
||||
//Random prob filter
|
||||
if (passed)
|
||||
{
|
||||
foreach (var reqTag in modifier.RequiredTags)
|
||||
if (!_random.Prob(modifier.GenerationProb))
|
||||
{
|
||||
if (!selectedConfig.Tags.Contains(reqTag))
|
||||
{
|
||||
passed = false;
|
||||
break;
|
||||
}
|
||||
passed = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -306,12 +293,26 @@ public sealed partial class CP14DemiplaneSystem
|
||||
}
|
||||
}
|
||||
|
||||
//Random prob filter
|
||||
if (passed)
|
||||
//Tag blacklist filter
|
||||
foreach (var configTag in selectedConfig.Tags)
|
||||
{
|
||||
if (!_random.Prob(modifier.GenerationProb))
|
||||
if (modifier.BlacklistTags.Count != 0 && modifier.BlacklistTags.Contains(configTag))
|
||||
{
|
||||
passed = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//Tag required filter
|
||||
if (passed)
|
||||
{
|
||||
foreach (var reqTag in modifier.RequiredTags)
|
||||
{
|
||||
if (!selectedConfig.Tags.Contains(reqTag))
|
||||
{
|
||||
passed = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
using Content.Server._CP14.Demiplane.Components;
|
||||
using Content.Server._CP14.RoundStatistic;
|
||||
using Content.Server.Chat.Managers;
|
||||
using Content.Server.Chat.Systems;
|
||||
using Content.Server.Flash;
|
||||
using Content.Server.Procedural;
|
||||
using Content.Shared._CP14.Demiplane;
|
||||
using Content.Shared._CP14.Demiplane.Components;
|
||||
using Content.Shared.Chat;
|
||||
using Content.Shared.Popups;
|
||||
using Robust.Server.Audio;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Map.Components;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
@@ -29,6 +34,8 @@ public sealed partial class CP14DemiplaneSystem : CP14SharedDemiplaneSystem
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
[Dependency] private readonly CP14RoundStatTrackerSystem _statistic = default!;
|
||||
[Dependency] private readonly ChatSystem _chat = default!;
|
||||
[Dependency] private readonly IChatManager _chatManager = default!;
|
||||
|
||||
private EntityQuery<CP14DemiplaneComponent> _demiplaneQuery;
|
||||
|
||||
@@ -42,6 +49,7 @@ public sealed partial class CP14DemiplaneSystem : CP14SharedDemiplaneSystem
|
||||
InitConnections();
|
||||
InitStabilization();
|
||||
InitEchoes();
|
||||
InitDestruction();
|
||||
|
||||
SubscribeLocalEvent<CP14DemiplaneComponent, ComponentShutdown>(OnDemiplanShutdown);
|
||||
SubscribeLocalEvent<CP14SpawnOutOfDemiplaneComponent, MapInitEvent>(OnSpawnOutOfDemiplane);
|
||||
@@ -75,6 +83,7 @@ public sealed partial class CP14DemiplaneSystem : CP14SharedDemiplaneSystem
|
||||
|
||||
UpdateGeneration(frameTime);
|
||||
UpdateStabilization(frameTime);
|
||||
UpdateDestruction(frameTime);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -161,4 +170,19 @@ public sealed partial class CP14DemiplaneSystem : CP14SharedDemiplaneSystem
|
||||
RemoveDemiplaneRandomEntryPoint(demiplane, entry);
|
||||
}
|
||||
}
|
||||
|
||||
private void DemiplaneAnnounce(EntityUid mapUid, string text)
|
||||
{
|
||||
var mapId = Comp<MapComponent>(mapUid).MapId;
|
||||
|
||||
_chatManager.ChatMessageToManyFiltered(
|
||||
Filter.BroadcastMap(mapId),
|
||||
ChatChannel.Radio,
|
||||
text,
|
||||
text,
|
||||
_mapManager.GetMapEntityId(mapId),
|
||||
false,
|
||||
true,
|
||||
null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,18 +95,14 @@ public sealed class CP14SpawnRandomDemiplaneJob : Job<bool>
|
||||
if (!_prototypeManager.TryIndex(modifier, out var indexedModifier))
|
||||
continue;
|
||||
|
||||
dungeonConfig.Layers.AddRange(indexedModifier.Layers);
|
||||
_entManager.AddComponents(DemiplaneMapUid, indexedModifier.Components);
|
||||
if (indexedModifier.Layers != null)
|
||||
dungeonConfig.Layers.AddRange(indexedModifier.Layers);
|
||||
if (indexedModifier.Components != null)
|
||||
_entManager.AddComponents(DemiplaneMapUid, indexedModifier.Components);
|
||||
|
||||
_sawmill.Debug($"Added modifier: {_seed} - {modifier.Id}");
|
||||
}
|
||||
|
||||
//Enter and exits
|
||||
if (_prototypeManager.TryIndex<DungeonConfigPrototype>("DemiplaneConnections", out var indexedConnections))
|
||||
{
|
||||
dungeonConfig.Layers.AddRange(indexedConnections.Layers);
|
||||
}
|
||||
|
||||
//Setup gravity
|
||||
var gravity = _entManager.EnsureComponent<GravityComponent>(grid);
|
||||
gravity.Enabled = true;
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
using Content.Server.Explosion.EntitySystems;
|
||||
using Content.Shared._CP14.MagicEnergy;
|
||||
using Content.Shared._CP14.MagicWeakness;
|
||||
|
||||
namespace Content.Server._CP14.MagicWeakness;
|
||||
|
||||
public class CP14MagicWeaknessSystem : CP14SharedMagicWeaknessSystem
|
||||
{
|
||||
[Dependency] private readonly TriggerSystem _trigger = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<CP14MagicUnsafeTriggerComponent, CP14MagicEnergyBurnOutEvent>(OnMagicEnergyBurnOutTrigger);
|
||||
SubscribeLocalEvent<CP14MagicUnsafeTriggerComponent, CP14MagicEnergyOverloadEvent>(OnMagicEnergyOverloadTrigger);
|
||||
}
|
||||
|
||||
private void OnMagicEnergyOverloadTrigger(Entity<CP14MagicUnsafeTriggerComponent> ent, ref CP14MagicEnergyOverloadEvent args)
|
||||
{
|
||||
_trigger.Trigger(ent);
|
||||
}
|
||||
|
||||
private void OnMagicEnergyBurnOutTrigger(Entity<CP14MagicUnsafeTriggerComponent> ent, ref CP14MagicEnergyBurnOutEvent args)
|
||||
{
|
||||
_trigger.Trigger(ent);
|
||||
}
|
||||
}
|
||||
@@ -29,9 +29,6 @@ public sealed partial class CP14UniqueLootSystem : EntitySystem
|
||||
|
||||
if (!Deleted(ent))
|
||||
Spawn(loot, Transform(ent).Coordinates);
|
||||
|
||||
if (!TerminatingOrDeleted(ent) && Exists(ent))
|
||||
QueueDel(ent);
|
||||
}
|
||||
|
||||
private void OnRoundStart(RoundStartingEvent ev)
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
using Robust.Shared.Audio;
|
||||
|
||||
namespace Content.Shared._CP14.Demiplane.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Destroy demiplane after time
|
||||
/// </summary>
|
||||
[RegisterComponent, AutoGenerateComponentState, AutoGenerateComponentPause, Access(typeof(CP14SharedDemiplaneSystem))]
|
||||
public sealed partial class CP14DemiplaneTimedDestructionComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public TimeSpan TimeToDestruction = TimeSpan.FromSeconds(150f);
|
||||
|
||||
[DataField, AutoPausedField]
|
||||
public TimeSpan EndTime = TimeSpan.Zero;
|
||||
|
||||
/// <summary>
|
||||
/// Countdown audio stream.
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public EntityUid? Stream = null;
|
||||
|
||||
/// <summary>
|
||||
/// Sound that plays when the demiplane start to collapse.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public SoundSpecifier Sound = new SoundCollectionSpecifier("ExpeditionEnd")
|
||||
{
|
||||
Params = AudioParams.Default.WithVolume(-5),
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Song selected on MapInit so we can predict the audio countdown properly.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public SoundPathSpecifier? SelectedSong;
|
||||
}
|
||||
@@ -15,13 +15,13 @@ public sealed partial class CP14DemiplaneModifierPrototype : IPrototype
|
||||
/// <summary>
|
||||
/// Modifier Tier. Can be generated only in demiplane keys with the corresponding tier
|
||||
/// </summary>
|
||||
[DataField(required: true)]
|
||||
[DataField]
|
||||
public List<int> Tiers = new();
|
||||
|
||||
/// <summary>
|
||||
/// Each modifier belongs to specific categories. Used by the generator to determine what to generate
|
||||
/// </summary>
|
||||
[DataField(required: true)]
|
||||
[DataField]
|
||||
public Dictionary<ProtoId<CP14DemiplaneModifierCategoryPrototype>, float> Categories = new();
|
||||
|
||||
/// <summary>
|
||||
@@ -48,13 +48,13 @@ public sealed partial class CP14DemiplaneModifierPrototype : IPrototype
|
||||
/// Generation layers that will be added to the location generation after the main layers.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public List<IDunGenLayer> Layers = new();
|
||||
public List<IDunGenLayer>? Layers;
|
||||
|
||||
/// <summary>
|
||||
/// Components that will be added to the map
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public ComponentRegistry Components = new();
|
||||
public ComponentRegistry? Components;
|
||||
|
||||
/// <summary>
|
||||
/// Modifier cannot be applied to locations with the following tags. Leave empty for disable
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace Content.Shared._CP14.MagicWeakness;
|
||||
/// imposes damage on excessive use of magic
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
[Access(typeof(CP14MagicWeaknessSystem))]
|
||||
[Access(typeof(CP14SharedMagicWeaknessSystem))]
|
||||
public sealed partial class CP14MagicUnsafeDamageComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace Content.Shared._CP14.MagicWeakness;
|
||||
/// imposes debuffs on excessive use of magic
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
[Access(typeof(CP14MagicWeaknessSystem))]
|
||||
[Access(typeof(CP14SharedMagicWeaknessSystem))]
|
||||
public sealed partial class CP14MagicUnsafeSleepComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared._CP14.MagicWeakness;
|
||||
|
||||
/// <summary>
|
||||
/// trigger entity on unsafe magic energy damage
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
[Access(typeof(CP14SharedMagicWeaknessSystem))]
|
||||
public sealed partial class CP14MagicUnsafeTriggerComponent : Component
|
||||
{
|
||||
}
|
||||
@@ -7,7 +7,7 @@ using Content.Shared.StatusEffect;
|
||||
|
||||
namespace Content.Shared._CP14.MagicWeakness;
|
||||
|
||||
public partial class CP14MagicWeaknessSystem : EntitySystem
|
||||
public abstract class CP14SharedMagicWeaknessSystem : EntitySystem
|
||||
{
|
||||
[ValidatePrototypeId<StatusEffectPrototype>]
|
||||
private const string StatusEffectKey = "ForcedSleep";
|
||||
@@ -9,4 +9,6 @@ cp14-round-end-monolith-recharged = Contact with the other worlds is being re-es
|
||||
cp14-round-end = The demiplane link crystal was completely discharged. The connection to the other worlds has been severed. The "interesting" part of the story is over here....
|
||||
|
||||
|
||||
cp14-demiplane-echoes = Echoes of voices
|
||||
cp14-demiplane-echoes = Echoes of voices
|
||||
|
||||
cp14-demiplane-countdown = The Demiplane is beginning to collapse! You have {$duration} minutes to escape!
|
||||
@@ -18,4 +18,5 @@ cp14-modifier-rabbits = rabbits
|
||||
cp14-modifier-boars = wild boars
|
||||
cp14-modifier-chasm = bottomless chasms
|
||||
cp14-modifier-air-lily = air lilies
|
||||
cp14-modifier-unstable-demiplane-crystal = unstable demiplane crystal
|
||||
cp14-modifier-time-limit-10 = temporary disintegration (10 minutes)
|
||||
cp14-modifier-shadow-kudzu = spreading darkness
|
||||
@@ -1,2 +1,2 @@
|
||||
cp14-event-announcement-demiplane-outbreak = A sense of danger pierces the air... Something from other worlds is invading your town.
|
||||
cp14-event-announcement-unstable-demiplane = Tension is building... an unstable demiplane has opened somewhere in the settlement. Close it down before the monsters come out.
|
||||
cp14-event-announcement-unstable-demiplane = Tension is building... an wild demiplane has opened somewhere in the settlement. Close it down before the monsters come out.
|
||||
@@ -9,4 +9,6 @@ cp14-round-end-monolith-recharged = Связь с другими мирами в
|
||||
cp14-round-end = Кристалл связи с демипланами окончательно разрядился. Связь с другими мирами оборвалась. "Интересная" часть этой истории окончена...
|
||||
|
||||
|
||||
cp14-demiplane-echoes = Эхо голосов
|
||||
cp14-demiplane-echoes = Эхо голосов
|
||||
|
||||
cp14-demiplane-countdown = Демиплан начинает коллапсировать! У вас {$duration} минут, чтобы покинуть его!
|
||||
@@ -18,4 +18,5 @@ cp14-modifier-rabbits = кроликов
|
||||
cp14-modifier-boars = диких кабанов
|
||||
cp14-modifier-chasm = бездонных пропастей
|
||||
cp14-modifier-air-lily = воздушных лилий
|
||||
cp14-modifier-unstable-demiplane-crystal = нестабильного кристалла демипланов
|
||||
cp14-modifier-time-limit-10 = временного распада (10 минут)
|
||||
cp14-modifier-shadow-kudzu = распространяющейся тьмы
|
||||
@@ -1,2 +1,2 @@
|
||||
cp14-event-announcement-demiplane-outbreak = Воздух пронзает чувство опасности... Что-то из других миров вторгается в ваш городок.
|
||||
cp14-event-announcement-unstable-demiplane = Нарастает напряжение... где-то в городе открылся нестабильный демиплан. Закройте его, до того как из него вырвутся толпы монстров.
|
||||
cp14-event-announcement-unstable-demiplane = Нарастает напряжение... где-то в городе открылся дикий демиплан. Закройте его, до того как из него вырвутся толпы монстров.
|
||||
@@ -33,6 +33,9 @@
|
||||
Fun: 1
|
||||
Weather: 1
|
||||
MapLight: 1
|
||||
selectedModifiers:
|
||||
- EntryRoom
|
||||
- Exit
|
||||
|
||||
- type: entity
|
||||
id: CP14DemiplaneKeyT2
|
||||
@@ -46,11 +49,14 @@
|
||||
color: red
|
||||
- type: CP14DemiplaneGeneratorData
|
||||
tiersContent:
|
||||
1: 0.75 # We dont have lot t2 content now. In future, decrease to 0.33
|
||||
1: 0.6 # We dont have lot t2 content now. In future, decrease to 0.33
|
||||
2: 1
|
||||
limits:
|
||||
Reward: 1.5
|
||||
Danger: 2
|
||||
Reward: 1
|
||||
Danger: 1
|
||||
Fun: 1
|
||||
Weather: 1
|
||||
MapLight: 1
|
||||
MapLight: 1
|
||||
selectedModifiers:
|
||||
- EntryRoom
|
||||
- Exit
|
||||
@@ -1,3 +1,36 @@
|
||||
- type: entity
|
||||
id: CP14DemiplanRiftCore
|
||||
categories: [ ForkFiltered ]
|
||||
name: demiplan rift core
|
||||
description: A subtle connection between the real world and the demiplane where the adventurers went. Sooner or later they will return from there.
|
||||
components:
|
||||
- type: CP14DemiplaneRift
|
||||
- type: Transform
|
||||
anchored: True
|
||||
- type: Clickable
|
||||
- type: Physics
|
||||
canCollide: false
|
||||
bodyType: Static
|
||||
- type: Sprite
|
||||
noRot: true
|
||||
drawdepth: Effects
|
||||
sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi
|
||||
layers:
|
||||
- state: connective
|
||||
shader: unshaded
|
||||
- type: PointLight
|
||||
radius: 2
|
||||
energy: 2
|
||||
color: "#371c5c"
|
||||
netsync: false
|
||||
- type: GuideHelp
|
||||
guides:
|
||||
- CP14_RU_Demiplanes
|
||||
- CP14_EN_Demiplanes
|
||||
- type: Speech
|
||||
speechVerb: Ghost
|
||||
|
||||
|
||||
- type: entity
|
||||
id: CP14DemiplaneTimedRadiusPassway
|
||||
parent: CP14DemiplanRiftCore
|
||||
@@ -70,35 +103,4 @@
|
||||
shader: unshaded
|
||||
color: red
|
||||
- type: PointLight
|
||||
color: red
|
||||
|
||||
- type: entity
|
||||
id: CP14DemiplanRiftCore
|
||||
categories: [ ForkFiltered ]
|
||||
name: demiplan rift core
|
||||
description: A subtle connection between the real world and the demiplane where the adventurers went. Sooner or later they will return from there.
|
||||
components:
|
||||
- type: CP14DemiplaneRift
|
||||
- type: Transform
|
||||
anchored: True
|
||||
- type: Clickable
|
||||
- type: Physics
|
||||
canCollide: false
|
||||
bodyType: Static
|
||||
- type: Sprite
|
||||
drawdepth: Effects
|
||||
sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi
|
||||
layers:
|
||||
- state: connective
|
||||
shader: unshaded
|
||||
- type: PointLight
|
||||
radius: 2
|
||||
energy: 2
|
||||
color: "#371c5c"
|
||||
netsync: false
|
||||
- type: GuideHelp
|
||||
guides:
|
||||
- CP14_RU_Demiplanes
|
||||
- CP14_EN_Demiplanes
|
||||
- type: Speech
|
||||
speechVerb: Ghost
|
||||
color: red
|
||||
@@ -45,51 +45,96 @@
|
||||
- type: Damageable
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTypeTrigger
|
||||
damageType: Heat
|
||||
damage: 2
|
||||
behaviors:
|
||||
- !type:TriggerBehavior
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
|
||||
# First wave
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 50
|
||||
behaviors:
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- !type:SpawnEntitiesBehavior
|
||||
offset: 6
|
||||
spawn:
|
||||
CP14DemiplaneKeyT1:
|
||||
min: 0
|
||||
max: 2
|
||||
CP14MobGroupSpawnerMosquito:
|
||||
min: 1
|
||||
max: 1
|
||||
|
||||
# Second wave
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 100
|
||||
behaviors:
|
||||
- !type:SpawnEntitiesBehavior
|
||||
offset: 6
|
||||
spawn:
|
||||
CP14MobGroupSpawnerHydras:
|
||||
min: 1
|
||||
max: 1
|
||||
|
||||
# Third wave
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 200
|
||||
behaviors:
|
||||
- !type:SpawnEntitiesBehavior
|
||||
offset: 6
|
||||
spawn:
|
||||
CP14MobGroupSpawnerIceSpectres:
|
||||
min: 1
|
||||
max: 1
|
||||
- !type:SpawnEntitiesBehavior
|
||||
offset: 6
|
||||
spawn:
|
||||
CP14MobGroupSpawnerZombie:
|
||||
min: 1
|
||||
max: 1
|
||||
|
||||
# Destroyed Yay!
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 300
|
||||
behaviors:
|
||||
- !type:SpawnEntitiesBehavior # Reward
|
||||
offset: 5
|
||||
spawn:
|
||||
CP14SpawnerDemiplaneLootT1:
|
||||
min: 4
|
||||
max: 8
|
||||
- !type:SpawnEntitiesBehavior
|
||||
offset: 2
|
||||
spawn:
|
||||
CP14DemiplaneKeyT2:
|
||||
min: 1
|
||||
max: 1
|
||||
- !type:PlaySoundBehavior
|
||||
- !type:SpawnEntitiesBehavior # Exit
|
||||
spawn:
|
||||
CP14DemiplanePasswayRed:
|
||||
min: 1
|
||||
max: 1
|
||||
- !type:PlaySoundBehavior #SFX
|
||||
sound:
|
||||
collection: GlassBreak
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
path: /Audio/Effects/demon_dies.ogg
|
||||
params:
|
||||
pitch: 1.5
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- type: CP14MagicEnergyExaminable
|
||||
- type: CP14MagicEnergyContainer
|
||||
maxEnergy: 500
|
||||
energy: 500
|
||||
maxEnergy: 600
|
||||
energy: 600
|
||||
- type: CP14MagicEnergyDraw
|
||||
energy: -5
|
||||
energy: -6
|
||||
delay: 6 # 10m to discharge
|
||||
safe: false
|
||||
- type: CP14MagicUnsafeDamage
|
||||
damagePerEnergy:
|
||||
types:
|
||||
Heat: 0.1
|
||||
- type: CP14MagicUnsafeTrigger
|
||||
- type: DeleteOnTrigger
|
||||
- type: SpawnOnTrigger
|
||||
proto: CP14MobGroupSpawnerRandom
|
||||
- type: CP14DemiplaneStabilizer
|
||||
- type: AmbientSound
|
||||
volume: 10
|
||||
volume: 20
|
||||
range: 15
|
||||
sound:
|
||||
path: /Audio/_CP14/Effects/demiplane_heartbeat.ogg
|
||||
@@ -98,6 +143,7 @@
|
||||
parent: MarkerBase
|
||||
name: mob group random spawner
|
||||
id: CP14MobGroupSpawnerRandom
|
||||
suffix: Spawn self copy out of demiplane
|
||||
categories: [ ForkFiltered ]
|
||||
components:
|
||||
- type: CP14SpawnOutOfDemiplane
|
||||
@@ -105,16 +151,15 @@
|
||||
offset: 3
|
||||
table: !type:GroupSelector
|
||||
rolls: !type:RangeNumberSelector
|
||||
range: 1, 2
|
||||
range: 2, 2
|
||||
children:
|
||||
- id: CP14MobGroupSpawnerHydras
|
||||
- id: CP14MobGroupSpawnerMosquito
|
||||
- id: CP14MobGroupSpawnerIceSpectres
|
||||
- id: CP14MobGroupSpawnerZombie
|
||||
|
||||
- type: entity
|
||||
id: CP14AutoDemiplaneKeyT1
|
||||
parent: CP14DemiplaneKeyT1
|
||||
suffix: T1, Auto Open
|
||||
suffix: T1 Unstable rift event, Auto Open
|
||||
components:
|
||||
- type: CP14DemiplaneAutoOpen
|
||||
- type: CP14DemiplaneGeneratorData
|
||||
@@ -122,12 +167,14 @@
|
||||
- CP14DemiplanRiftCore
|
||||
- CP14DemiplanePasswayRed
|
||||
selectedModifiers:
|
||||
- UnstableDemiplaneCrystal
|
||||
- EntryRoom
|
||||
- UnstableDemiplaneCrystal #Spawn exit when broken
|
||||
- TimeLimit10
|
||||
|
||||
- type: entity
|
||||
id: CP14AutoDemiplaneKeyT2
|
||||
parent: CP14DemiplaneKeyT2
|
||||
suffix: T2, Auto Open
|
||||
suffix: T2 Unstable rift event, Auto Open
|
||||
components:
|
||||
- type: CP14DemiplaneAutoOpen
|
||||
- type: CP14DemiplaneGeneratorData
|
||||
@@ -135,4 +182,6 @@
|
||||
- CP14DemiplanRiftCore
|
||||
- CP14DemiplanePasswayRed
|
||||
selectedModifiers:
|
||||
- UnstableDemiplaneCrystal
|
||||
- EntryRoom
|
||||
- UnstableDemiplaneCrystal #Spawn exit when broken
|
||||
- TimeLimit10
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
- CP14FloorSnow
|
||||
- CP14FloorSnowDeep
|
||||
- CP14FloorSnowDeepDeep
|
||||
count: 5
|
||||
minGroupSize: 2
|
||||
maxGroupSize: 5
|
||||
count: 4
|
||||
minGroupSize: 5
|
||||
maxGroupSize: 8
|
||||
|
||||
# TIER 2
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
name: cp14-modifier-explosive
|
||||
generationWeight: 0.25
|
||||
categories:
|
||||
Danger: 0.4
|
||||
Danger: 0.2
|
||||
layers:
|
||||
- !type:OreDunGen
|
||||
entity: LandMineExplosive
|
||||
@@ -45,6 +45,7 @@
|
||||
tiers:
|
||||
- 2
|
||||
- 3
|
||||
name: cp14-modifier-shadow-kudzu
|
||||
categories:
|
||||
Danger: 0.3
|
||||
layers:
|
||||
@@ -55,17 +56,14 @@
|
||||
maxGroupSize: 1
|
||||
|
||||
- type: cp14DemiplaneModifier
|
||||
id: UnstableDemiplaneCrystal
|
||||
generationWeight: 0.05 # Very rare
|
||||
id: TimeLimit10
|
||||
generationWeight: 0.4
|
||||
tiers:
|
||||
- 1
|
||||
- 2
|
||||
- 3
|
||||
name: cp14-modifier-unstable-demiplane-crystal
|
||||
name: cp14-modifier-time-limit-10
|
||||
categories:
|
||||
Danger: 0.3
|
||||
layers:
|
||||
- !type:OreDunGen
|
||||
entity: CP14DangerousMobSpawnCrystal
|
||||
count: 1
|
||||
minGroupSize: 1
|
||||
maxGroupSize: 1
|
||||
Danger: 0.1
|
||||
components:
|
||||
- type: CP14DemiplaneTimedDestruction
|
||||
timeToDestruction: 600 # 10 minutes
|
||||
@@ -0,0 +1,28 @@
|
||||
- type: cp14DemiplaneModifier
|
||||
id: UnstableDemiplaneCrystal
|
||||
layers:
|
||||
- !type:OreDunGen
|
||||
entity: CP14DangerousMobSpawnCrystal
|
||||
count: 1
|
||||
minGroupSize: 1
|
||||
maxGroupSize: 1
|
||||
|
||||
- type: cp14DemiplaneModifier
|
||||
id: EntryRoom
|
||||
generationProb: 0
|
||||
layers:
|
||||
- !type:OreDunGen
|
||||
entity: CP14DemiplanEnterRoomMarker
|
||||
count: 1
|
||||
minGroupSize: 1
|
||||
maxGroupSize: 1
|
||||
|
||||
- type: cp14DemiplaneModifier
|
||||
id: Exit
|
||||
generationProb: 0
|
||||
layers:
|
||||
- !type:OreDunGen
|
||||
entity: CP14DemiplanePassway
|
||||
count: 2
|
||||
minGroupSize: 1
|
||||
maxGroupSize: 1
|
||||
@@ -1,18 +0,0 @@
|
||||
- type: dungeonConfig
|
||||
id: DemiplaneConnections
|
||||
layers:
|
||||
#- !type:OreDunGen
|
||||
# entity: CP14DemiplaneEntryPointMarker
|
||||
# count: 1
|
||||
# minGroupSize: 4
|
||||
# maxGroupSize: 4
|
||||
- !type:OreDunGen
|
||||
entity: CP14DemiplanEnterRoomMarker
|
||||
count: 1
|
||||
minGroupSize: 1
|
||||
maxGroupSize: 1
|
||||
- !type:OreDunGen
|
||||
entity: CP14DemiplanePassway
|
||||
count: 2
|
||||
minGroupSize: 1
|
||||
maxGroupSize: 1
|
||||
Reference in New Issue
Block a user