From d100ed765bc24b3159c68b34e66dd525fa1629f9 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Wed, 5 Feb 2025 14:21:12 +0300 Subject: [PATCH] Echoes of voices from the demiplanes (#840) * split lightdarkness type magic to 2 * signal lights * finish spells * demiplane voices echoes * Update closets.yml * spells impact relay * sprite fix --- ....cs => CP14DemiplaneSystem.Connections.cs} | 6 +- .../Demiplane/CP14DemiplaneSystem.Echoes.cs | 34 +++ ...n.cs => CP14DemiplaneSystem.Generation.cs} | 2 +- ...s => CP14DemiplaneSystem.Stabilization.cs} | 0 .../_CP14/Demiplane/CP14DemiplaneSystem.cs | 29 ++ .../CP14SpawnOutOfDemiplaneComponent.cs | 16 ++ .../en-US/_CP14/connection_messages.ftl | 11 +- .../en-US/_CP14/demiplane/demiplane.ftl | 3 + .../Locale/en-US/_CP14/magicTypes/magic.ftl | 3 +- .../ru-RU/_CP14/demiplane/demiplane.ftl | 3 + .../Locale/ru-RU/_CP14/magicTypes/magic.ftl | 3 +- .../_CP14/Catalog/Fills/closets.yml | 23 +- .../T0_sphere_of_light.yml | 4 +- .../T1_flash_light.yml | 4 +- .../Actions/Spells/Light/T1_signal_light.yml | 249 ++++++++++++++++++ .../_CP14/Entities/Actions/Spells/base.yml | 3 +- .../_CP14/Entities/Actions/Spells/scrolls.yml | 2 +- .../_CP14/Entities/Structures/round_end.yml | 2 +- .../_CP14/Entities/Structures/test.yml | 6 +- ...dungeon_entrance.yml => zLevelLadders.yml} | 0 .../Prototypes/_CP14/MagicTypes/magic.yml | 9 +- .../Effects/Magic/spells_icons.rsi/meta.json | 11 +- .../spells_icons.rsi/signal_light_blue.png | Bin 0 -> 654 bytes .../spells_icons.rsi/signal_light_red.png | Bin 0 -> 633 bytes .../spells_icons.rsi/signal_light_yellow.png | Bin 0 -> 611 bytes .../demiplan_rift_core.rsi/connective.png | Bin 0 -> 4904 bytes .../Dungeon/demiplan_rift_core.rsi/meta.json | 18 +- .../Dungeon/demiplan_rift_core.rsi/pulse.png | Bin 371 -> 0 bytes 28 files changed, 401 insertions(+), 40 deletions(-) rename Content.Server/_CP14/Demiplane/{CP14DemiplanSystem.Connections.cs => CP14DemiplaneSystem.Connections.cs} (93%) create mode 100644 Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Echoes.cs rename Content.Server/_CP14/Demiplane/{CP14DemiplanSystem.Generation.cs => CP14DemiplaneSystem.Generation.cs} (98%) rename Content.Server/_CP14/Demiplane/{CP14DemiplanSystem.Stabilization.cs => CP14DemiplaneSystem.Stabilization.cs} (100%) create mode 100644 Content.Server/_CP14/Demiplane/Components/CP14SpawnOutOfDemiplaneComponent.cs rename Resources/Prototypes/_CP14/Entities/Actions/Spells/{LightDarkness => Light}/T0_sphere_of_light.yml (97%) rename Resources/Prototypes/_CP14/Entities/Actions/Spells/{LightDarkness => Light}/T1_flash_light.yml (97%) create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_signal_light.yml rename Resources/Prototypes/_CP14/Entities/Structures/{dungeon_entrance.yml => zLevelLadders.yml} (100%) create mode 100644 Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/signal_light_blue.png create mode 100644 Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/signal_light_red.png create mode 100644 Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/signal_light_yellow.png create mode 100644 Resources/Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi/connective.png delete mode 100644 Resources/Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi/pulse.png diff --git a/Content.Server/_CP14/Demiplane/CP14DemiplanSystem.Connections.cs b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Connections.cs similarity index 93% rename from Content.Server/_CP14/Demiplane/CP14DemiplanSystem.Connections.cs rename to Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Connections.cs index aee960b47d..df8ac8e26e 100644 --- a/Content.Server/_CP14/Demiplane/CP14DemiplanSystem.Connections.cs +++ b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Connections.cs @@ -14,7 +14,7 @@ public sealed partial class CP14DemiplaneSystem private void OnRiftInit(Entity rift, ref MapInitEvent args) { var map = Transform(rift).MapUid; - if (TryComp(map, out var demiplane)) // In demiplane + if (_demiplaneQuery.TryComp(map, out var demiplane)) // In demiplane { if (rift.Comp.TryAutoLinkToMap) rift.Comp.Demiplane = map.Value; @@ -24,7 +24,7 @@ public sealed partial class CP14DemiplaneSystem } else if (rift.Comp.Demiplane is not null) //We out of demiplane { - if (TryComp(rift.Comp.Demiplane, out var riftDemiplane)) + if (_demiplaneQuery.TryComp(rift.Comp.Demiplane, out var riftDemiplane)) { if (rift.Comp.ActiveTeleport) AddDemiplaneRandomExitPoint((rift.Comp.Demiplane.Value, riftDemiplane), rift); @@ -37,7 +37,7 @@ public sealed partial class CP14DemiplaneSystem if (rift.Comp.Demiplane is null) return; - if (!TryComp(rift.Comp.Demiplane, out var riftDemiplane)) + if (!_demiplaneQuery.TryComp(rift.Comp.Demiplane, out var riftDemiplane)) return; RemoveDemiplaneRandomEntryPoint((rift.Comp.Demiplane.Value, riftDemiplane), rift); diff --git a/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Echoes.cs b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Echoes.cs new file mode 100644 index 0000000000..c93e70f2e4 --- /dev/null +++ b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Echoes.cs @@ -0,0 +1,34 @@ +using Content.Server.Chat.Systems; +using Robust.Shared.Random; + +namespace Content.Server._CP14.Demiplane; + +public sealed partial class CP14DemiplaneSystem +{ + [Dependency] private readonly ChatSystem _chat = default!; + + private void InitEchoes() + { + SubscribeLocalEvent(OnSpeak); + } + + private void OnSpeak(EntitySpokeEvent ev) + { + var map = Transform(ev.Source).MapUid; + + if (!_demiplaneQuery.TryComp(map, out var demiplane)) + return; + + //Get random exit, and send message there + if (demiplane.ExitPoints.Count == 0) + return; + var exit = _random.Pick(demiplane.ExitPoints); + + _chat.TrySendInGameICMessage(exit, + ev.Message, + InGameICChatType.Whisper, + ChatTransmitRange.NoGhosts, + nameOverride: Loc.GetString("cp14-demiplane-echoes"), + hideLog: true); + } +} diff --git a/Content.Server/_CP14/Demiplane/CP14DemiplanSystem.Generation.cs b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Generation.cs similarity index 98% rename from Content.Server/_CP14/Demiplane/CP14DemiplanSystem.Generation.cs rename to Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Generation.cs index 93ab253cae..2b1c36869a 100644 --- a/Content.Server/_CP14/Demiplane/CP14DemiplanSystem.Generation.cs +++ b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Generation.cs @@ -146,7 +146,7 @@ public sealed partial class CP14DemiplaneSystem return; } //We cant open demiplane in another demiplane or if parent is not Map - if (HasComp(Transform(generator).MapUid) || !HasComp(_transform.GetParentUid(args.User))) + if (_demiplaneQuery.HasComp(Transform(generator).MapUid) || !HasComp(_transform.GetParentUid(args.User))) { _popup.PopupEntity(Loc.GetString("cp14-demiplan-cannot-open", ("name", MetaData(generator).EntityName)), generator, args.User); return; diff --git a/Content.Server/_CP14/Demiplane/CP14DemiplanSystem.Stabilization.cs b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Stabilization.cs similarity index 100% rename from Content.Server/_CP14/Demiplane/CP14DemiplanSystem.Stabilization.cs rename to Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Stabilization.cs diff --git a/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.cs b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.cs index e196500033..ed61a5d576 100644 --- a/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.cs +++ b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.cs @@ -1,3 +1,4 @@ +using Content.Server._CP14.Demiplane.Components; using Content.Server._CP14.RoundStatistic; using Content.Server.Flash; using Content.Server.Procedural; @@ -28,15 +29,43 @@ public sealed partial class CP14DemiplaneSystem : CP14SharedDemiplaneSystem [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly CP14RoundStatTrackerSystem _statistic = default!; + private EntityQuery _demiplaneQuery; + public override void Initialize() { base.Initialize(); + _demiplaneQuery = GetEntityQuery(); + InitGeneration(); InitConnections(); InitStabilization(); + InitEchoes(); SubscribeLocalEvent(OnDemiplanShutdown); + SubscribeLocalEvent(OnSpawnOutOfDemiplane); + } + + private void OnSpawnOutOfDemiplane(Entity ent, ref MapInitEvent args) + { + //Check if entity is in demiplane + var map = Transform(ent).MapUid; + if (!_demiplaneQuery.TryComp(map, out var demiplane)) + return; + + //Get random exit demiplane point and spawn entity there + if (demiplane.ExitPoints.Count == 0) + return; + + var exit = _random.Pick(demiplane.ExitPoints); + var coordinates = Transform(exit).Coordinates; + + var proto = ent.Comp.Proto; + + if (proto is null) + proto = MetaData(ent).EntityPrototype?.ID; + + Spawn(proto, coordinates); } public override void Update(float frameTime) diff --git a/Content.Server/_CP14/Demiplane/Components/CP14SpawnOutOfDemiplaneComponent.cs b/Content.Server/_CP14/Demiplane/Components/CP14SpawnOutOfDemiplaneComponent.cs new file mode 100644 index 0000000000..932b02ad0e --- /dev/null +++ b/Content.Server/_CP14/Demiplane/Components/CP14SpawnOutOfDemiplaneComponent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.Demiplane.Components; + +/// +/// Creates an entity on demiplane exit points when that entity appears. +/// +[RegisterComponent] +public sealed partial class CP14SpawnOutOfDemiplaneComponent : Component +{ + /// + /// If null, the ProtoId of this entity is taken from the entity itself. + /// + [DataField] + public EntProtoId? Proto; +} diff --git a/Resources/Locale/en-US/_CP14/connection_messages.ftl b/Resources/Locale/en-US/_CP14/connection_messages.ftl index 4fda74208a..c2a409b667 100644 --- a/Resources/Locale/en-US/_CP14/connection_messages.ftl +++ b/Resources/Locale/en-US/_CP14/connection_messages.ftl @@ -1,5 +1,6 @@ -stalker-discord-info = To play on the server you need to go to our server in discord to authorise your account. -stalker-discord-auth-quit-btn = Exit -stalker-discord-auth-title = Authorisation -stalker-discord-auth-link = https://discord.com/invite/Sud2DMfhCC -stalker-discord-auth-browser-btn = Discord Server \ No newline at end of file +cp14-discord-info = To play on the server you need to go to our server in discord to authorise your account. +cp14-discord-auth-quit-btn = Exit +cp14-discord-auth-title = Authorisation +cp14-discord-auth-link = https://discord.com/invite/Sud2DMfhCC +cp14-discord-auth-browser-btn = Discord Server +cp14-discord-auth-text = Authorize \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/demiplane/demiplane.ftl b/Resources/Locale/en-US/_CP14/demiplane/demiplane.ftl index 23c7f24fe0..595630ca8f 100644 --- a/Resources/Locale/en-US/_CP14/demiplane/demiplane.ftl +++ b/Resources/Locale/en-US/_CP14/demiplane/demiplane.ftl @@ -7,3 +7,6 @@ cp14-round-end-monolith-50 = The demiplane link crystal is half discharged. cp14-round-end-monolith-discharged = You feel the connection to the other worlds begin to break.... The demiplane link crystal power will run out in { $time } { $units } if you don't charge it with mana completely... cp14-round-end-monolith-recharged = Contact with the other worlds is being re-established. The demiplane link crystal is fully charged. 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 \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/magicTypes/magic.ftl b/Resources/Locale/en-US/_CP14/magicTypes/magic.ftl index fb43c247a9..990907879e 100644 --- a/Resources/Locale/en-US/_CP14/magicTypes/magic.ftl +++ b/Resources/Locale/en-US/_CP14/magicTypes/magic.ftl @@ -2,7 +2,8 @@ cp14-magic-type-fire = Fire cp14-magic-type-water = Water cp14-magic-type-earth = Earth cp14-magic-type-healing = Healing -cp14-magic-type-light-darkness = Light and darkness +cp14-magic-type-light = Light +cp14-magic-type-darkness = Darkness cp14-magic-type-meta = Metamagic cp14-magic-type-gate = Gate cp14-magic-type-movement = Movement diff --git a/Resources/Locale/ru-RU/_CP14/demiplane/demiplane.ftl b/Resources/Locale/ru-RU/_CP14/demiplane/demiplane.ftl index b3100ab263..58ad6f2b2d 100644 --- a/Resources/Locale/ru-RU/_CP14/demiplane/demiplane.ftl +++ b/Resources/Locale/ru-RU/_CP14/demiplane/demiplane.ftl @@ -7,3 +7,6 @@ cp14-round-end-monolith-50 = Кристалл связи с демипланам cp14-round-end-monolith-discharged = Вы чувствуете, что связь с другими мирами начинает рваться... Сила кристалла связи иссякнет через { $time } { $units }, если не запитать его маной полностью... cp14-round-end-monolith-recharged = Связь с другими мирами восстанавливается. Энергия кристалла связи восстановлена. cp14-round-end = Кристалл связи с демипланами окончательно разрядился. Связь с другими мирами оборвалась. "Интересная" часть этой истории окончена... + + +cp14-demiplane-echoes = Эхо голосов \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/magicTypes/magic.ftl b/Resources/Locale/ru-RU/_CP14/magicTypes/magic.ftl index fe1b308257..dae3b2fe4f 100644 --- a/Resources/Locale/ru-RU/_CP14/magicTypes/magic.ftl +++ b/Resources/Locale/ru-RU/_CP14/magicTypes/magic.ftl @@ -2,7 +2,8 @@ cp14-magic-type-fire = Огонь cp14-magic-type-water = Вода cp14-magic-type-earth = Земля cp14-magic-type-healing = Исцеление -cp14-magic-type-light-darkness = Свет и тьма +cp14-magic-type-light = Свет +cp14-magic-type-darkness = Тьма cp14-magic-type-meta = Метамагия cp14-magic-type-gate = Пространство cp14-magic-type-movement = Движение diff --git a/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml b/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml index 93cb0c8c00..d5277eb77b 100644 --- a/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml +++ b/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml @@ -133,19 +133,16 @@ - type: StorageFill contents: - id: CP14Rope - - id: CP14Rope - - id: Bola + amount: 2 - id: Bola + amount: 2 - id: CP14ModularGuardHalberd - id: CP14BaseShield - id: CP14ModularGripIronLongGuard - - id: CP14ModularGripIronLongGuard + amount: 2 - id: CP14BaseLightCrossbow - id: CP14Crossbolt - - id: CP14Crossbolt - - id: CP14Crossbolt - - id: CP14Crossbolt - - id: CP14Crossbolt + amount: 5 - id: CP14EnergyCrystalSmall - id: CP14CrystalLampBlueEmpty - id: CP14BookImperialLawsHandBook @@ -158,13 +155,13 @@ - type: StorageFill contents: - id: CP14Rope - - id: CP14Rope + amount: 2 - id: Bola - id: Bola - id: CP14ModularGuardHalberd - id: CP14BaseShield - id: CP14ModularGripIronLongGuard - - id: CP14ModularGripIronLongGuard + amount: 2 - id: CP14EnergyCrystalSmall - id: CP14CrystalLampBlueEmpty - id: CP14StampGuardCommander @@ -181,4 +178,10 @@ - id: HandLabeler #TODO custom cp14 labeler - id: CP14StampDenied - id: CP14StampApproved - - id: CP14PaperFolderBlue \ No newline at end of file + - id: CP14PaperFolderBlue + - id: CP14SpellscrollSignalLightBlue + amount: 4 + - id: CP14SpellscrollSignalLightYellow + amount: 4 + - id: CP14SpellscrollSignalLightRed + amount: 4 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/LightDarkness/T0_sphere_of_light.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T0_sphere_of_light.yml similarity index 97% rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/LightDarkness/T0_sphere_of_light.yml rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T0_sphere_of_light.yml index 994dbcc39d..f47919e0a5 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/LightDarkness/T0_sphere_of_light.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T0_sphere_of_light.yml @@ -9,7 +9,7 @@ - type: CP14MagicEffectManaCost manaCost: 10 - type: CP14MagicEffect - magicType: LightDarkness + magicType: Light effects: - !type:CP14SpellSpawnEntityOnTarget spawns: @@ -120,7 +120,7 @@ volume: -12 - type: entity - parent: CP14BaseSpellScrollLightDarkness + parent: CP14BaseSpellScrollLight id: CP14SpellScrollSphereOfLight name: sphere of light spell scroll components: diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/LightDarkness/T1_flash_light.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_flash_light.yml similarity index 97% rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/LightDarkness/T1_flash_light.yml rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_flash_light.yml index 4552c73499..4e4f4ac1d2 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/LightDarkness/T1_flash_light.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_flash_light.yml @@ -9,7 +9,7 @@ - type: CP14MagicEffectManaCost manaCost: 10 - type: CP14MagicEffect - magicType: LightDarkness + magicType: Light telegraphyEffects: - !type:CP14SpellSpawnEntityOnTarget spawns: @@ -92,7 +92,7 @@ lifetime: 0.5 - type: entity - parent: CP14BaseSpellScrollLightDarkness + parent: CP14BaseSpellScrollLight id: CP14SpellScrollFlashLight name: flash light spell scroll components: diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_signal_light.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_signal_light.yml new file mode 100644 index 0000000000..4bd683cc24 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Light/T1_signal_light.yml @@ -0,0 +1,249 @@ +- type: entity + id: CP14ActionSpellSignalLightBase + abstract: true + components: + - type: Sprite + sprite: _CP14/Effects/Magic/spells_icons.rsi + - type: CP14MagicEffectManaCost + manaCost: 5 + - type: CP14MagicEffect + magicType: Light + - type: CP14MagicEffectSomaticAspect + - type: InstantAction + itemIconStyle: BigAction + sound: !type:SoundPathSpecifier + path: /Audio/Magic/rumble.ogg + event: !type:CP14DelayedInstantActionEvent + cooldown: 10 + castDelay: 0.5 + breakOnMove: false + +# RED + +- type: entity + id: CP14ActionSpellSignalLightRed + parent: CP14ActionSpellSignalLightBase + name: Red signal Light + description: You launch a hovering ball of light, briefly emitting a bright glow of red. This glow is able to penetrate the real world even from the demiplane. + components: + - type: Sprite + state: signal_light_red + - type: CP14MagicEffect + effects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14SignalLightRed + - type: CP14MagicEffectCastingVisual + proto: CP14RuneSignalLightRed + - type: InstantAction + icon: + sprite: _CP14/Effects/Magic/spells_icons.rsi + state: signal_light_red + +- type: entity + id: CP14RuneSignalLightRed + parent: CP14BaseMagicRune + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#db1616" + - type: Sprite + layers: + - state: sun + color: "#db1616" + shader: unshaded + +- type: entity + parent: CP14BaseSpellScrollLight + id: CP14SpellscrollSignalLightRed + name: red signal light spell scroll + components: + - type: CP14SpellStorage + spells: + - CP14ActionSpellSignalLightRed + +# YELLOW + +- type: entity + id: CP14ActionSpellSignalLightYellow + parent: CP14ActionSpellSignalLightBase + name: Yellow signal Light + description: You launch a hovering ball of light, briefly emitting a bright glow of yellow. This glow is able to penetrate the real world even from the demiplane. + components: + - type: Sprite + state: signal_light_yellow + - type: CP14MagicEffect + effects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14SignalLightYellow + - type: CP14MagicEffectCastingVisual + proto: CP14RuneSignalLightYellow + - type: InstantAction + icon: + sprite: _CP14/Effects/Magic/spells_icons.rsi + state: signal_light_yellow + +- type: entity + id: CP14RuneSignalLightYellow + parent: CP14BaseMagicRune + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#ebc942" + - type: Sprite + layers: + - state: sun + color: "#ebc942" + shader: unshaded + +- type: entity + parent: CP14BaseSpellScrollLight + id: CP14SpellscrollSignalLightYellow + name: yellow signal light spell scroll + components: + - type: CP14SpellStorage + spells: + - CP14ActionSpellSignalLightYellow + +# BLUE + +- type: entity + id: CP14ActionSpellSignalLightBlue + parent: CP14ActionSpellSignalLightBase + name: Blue signal Light + description: You launch a hovering ball of light, briefly emitting a bright glow of blue. This glow is able to penetrate the real world even from the demiplane. + components: + - type: Sprite + state: signal_light_blue + - type: CP14MagicEffect + effects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14SignalLightBlue + - type: CP14MagicEffectCastingVisual + proto: CP14RuneSignalLightBlue + - type: InstantAction + icon: + sprite: _CP14/Effects/Magic/spells_icons.rsi + state: signal_light_blue + +- type: entity + id: CP14RuneSignalLightBlue + parent: CP14BaseMagicRune + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: "#42aaeb" + - type: Sprite + layers: + - state: sun + color: "#42aaeb" + shader: unshaded + +- type: entity + parent: CP14BaseSpellScrollLight + id: CP14SpellscrollSignalLightBlue + name: blue signal light spell scroll + components: + - type: CP14SpellStorage + spells: + - CP14ActionSpellSignalLightBlue + +# Signals + +- type: entity + id: CP14SignalLightBase + abstract: true + categories: [ ForkFiltered ] + name: signal light + components: + - type: TimedDespawn + lifetime: 12 + - type: Sprite + sprite: _CP14/Effects/Magic/sphere_of_light.rsi + noRot: true + layers: + - state: icon + shader: unshaded + - type: PointLight + radius: 20.0 + energy: 1 + netsync: false + mask: /Textures/_CP14/Effects/LightMasks/lighthouse_cone.png + - type: EmitSoundOnSpawn + sound: + path: /Audio/Items/Flare/flare_on.ogg + - type: AmbientSound + enabled: true + volume: -5 + range: 5 + sound: + path: /Audio/Items/Flare/flare_burn.ogg #TODO sound redesign + - type: CP14SpawnOutOfDemiplane + +- type: entity + id: CP14SignalLightRed + parent: CP14SignalLightBase + suffix: Red + components: + - type: Sprite + color: "#db1616" + - type: PointLight + color: "#db1616" + - type: LightBehaviour + behaviours: + - !type:PulseBehaviour + interpolate: Cubic + maxDuration: 2 + minValue: 1.0 + maxValue: 60.0 + property: Energy + isLooped: true + enabled: true + - type: RotatingLight + speed: 80 + +- type: entity + id: CP14SignalLightYellow + parent: CP14SignalLightBase + suffix: Yellow + components: + - type: Sprite + color: "#ebc942" + - type: PointLight + color: "#ebc942" + - type: LightBehaviour + behaviours: + - !type:PulseBehaviour + interpolate: Cubic + maxDuration: 3 + minValue: 1.0 + maxValue: 60.0 + property: Energy + isLooped: true + enabled: true + - type: RotatingLight + speed: 30 + +- type: entity + id: CP14SignalLightBlue + parent: CP14SignalLightBase + suffix: Blue + components: + - type: Sprite + color: "#42aaeb" + - type: PointLight + color: "#42aaeb" + - type: LightBehaviour + behaviours: + - !type:PulseBehaviour + interpolate: Cubic + maxDuration: 4 + minValue: 1.0 + maxValue: 60.0 + property: Energy + isLooped: true + enabled: true + - type: RotatingLight + speed: 50 diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/base.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/base.yml index 4b80f39d08..2d265a0036 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/base.yml @@ -34,4 +34,5 @@ - type: Sprite drawdepth: Effects sprite: _CP14/Effects/Magic/cast_impact.rsi - noRot: true \ No newline at end of file + noRot: true + - type: CP14SpawnOutOfDemiplane \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/scrolls.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/scrolls.yml index e0be9de88b..8673a81d32 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/scrolls.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/scrolls.yml @@ -113,7 +113,7 @@ - type: entity abstract: true - id: CP14BaseSpellScrollLightDarkness + id: CP14BaseSpellScrollLight parent: CP14BaseSpellScroll components: - type: Sprite diff --git a/Resources/Prototypes/_CP14/Entities/Structures/round_end.yml b/Resources/Prototypes/_CP14/Entities/Structures/round_end.yml index 18edda0fd6..b254d3bd84 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/round_end.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/round_end.yml @@ -35,7 +35,7 @@ - type: PointLight enabled: true color: "#8f42ff" - energy: 30 + energy: 1 radius: 5 netsync: false - type: LightBehaviour diff --git a/Resources/Prototypes/_CP14/Entities/Structures/test.yml b/Resources/Prototypes/_CP14/Entities/Structures/test.yml index 7f95b11c70..e044ed376a 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/test.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/test.yml @@ -67,9 +67,7 @@ drawdepth: Effects sprite: /Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi layers: - - state: core - shader: unshaded - - state: pulse + - state: connective shader: unshaded - type: PointLight radius: 2 @@ -80,6 +78,8 @@ guides: - CP14_RU_Demiplanes - CP14_EN_Demiplanes + - type: Speech + speechVerb: Ghost - type: entity id: CP14DemiplaneTimedRadiusPassway diff --git a/Resources/Prototypes/_CP14/Entities/Structures/dungeon_entrance.yml b/Resources/Prototypes/_CP14/Entities/Structures/zLevelLadders.yml similarity index 100% rename from Resources/Prototypes/_CP14/Entities/Structures/dungeon_entrance.yml rename to Resources/Prototypes/_CP14/Entities/Structures/zLevelLadders.yml diff --git a/Resources/Prototypes/_CP14/MagicTypes/magic.yml b/Resources/Prototypes/_CP14/MagicTypes/magic.yml index 9aa4acb852..63396e38aa 100644 --- a/Resources/Prototypes/_CP14/MagicTypes/magic.yml +++ b/Resources/Prototypes/_CP14/MagicTypes/magic.yml @@ -19,10 +19,15 @@ color: "#89e04f" - type: magicType - id: LightDarkness - name: cp14-magic-type-light-darkness + id: Light + name: cp14-magic-type-light color: "#ba97b8" +- type: magicType + id: Darkness + name: cp14-magic-type-darkness + color: "#4e0691" + - type: magicType id: Meta name: cp14-magic-type-meta diff --git a/Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/meta.json b/Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/meta.json index 69794f802c..14bdc67b34 100644 --- a/Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/meta.json +++ b/Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/meta.json @@ -5,7 +5,7 @@ "y": 32 }, "license": "All right reserved", - "copyright": "Created by .kreks., cure_poison, cure_burn, mana_gift, water creation, plant_growth, beer creation, sprint, tiefling_revenge and resurrection by TheShuEd", + "copyright": "Created by .kreks., cure_poison, cure_burn, mana_gift, water creation, plant_growth, beer creation, sprint, tiefling_revenge, signal_light_blue, signal_light_red, signal_light_yellow and resurrection by TheShuEd", "states": [ { "name": "beer_creation" @@ -55,6 +55,15 @@ { "name": "shadow_step" }, + { + "name": "signal_light_blue" + }, + { + "name": "signal_light_red" + }, + { + "name": "signal_light_yellow" + }, { "name": "sphere_of_light" }, diff --git a/Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/signal_light_blue.png b/Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/signal_light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..e875c50fca79c9a9a37413fef51b306a0639dcdf GIT binary patch literal 654 zcmV;90&)F`P)Px%NJ&INR9J=WmQ83AK^TUgZL&>VOSVa%CZ+|krl6vDv7mS;cv0-#gG#93THnYa6Ob zaQCoG>Ka+I{nw+xY{$-iNu3#%h4QvTZD{)gG?lk?4NC094KZ!Xv;nP=w7(hKwTBW1 z=zk(Fj_jc|=)-aMr9=UGLK5ER!>w!N%g0t)RnrFE4k)ep6()AO$pIW~r?t%sZC*GK zzz^WlF%0;$qx;(_DCcmWWc_Yz0XK!cyJ*lg91aznYH@O>`m3)~ z1&0c{hR54P;o^PC#8cR34V3f}_Kk9|VFs+MV3k6+;R=)njjew7h9unLqP@k1Czmh& zZHeUqKaajbo{#ag@ z>V#QL*MY7B=c32rzP4>HLx)Wn@q*t64<%uuPu2CqMq$1b;e;#|LEADlO{< oZ8a>poLc0iJ~s81yv={jPohu+EO8sHX#fBK07*qoM6N<$f*gA+c>n+a literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/signal_light_red.png b/Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/signal_light_red.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b4955f119ddc2685dcc9f39742082f9ff16285 GIT binary patch literal 633 zcmV-<0*3vGP)Px%Gf6~2R9J=WmQ8CDQ51%sv}q=kq@xLq#wJuuBUGt$qoBAbxNu=z3Zj%+H+C(B zHsVr5(1N%T7YZu=01*+tz>QhNMbQ!=#zHZv(P*P-8}kXr#Sq)HO`RlzEz$>ObLZao zy!XyKX9hM|XG}&3$!H)H$h{j;02vz$(b=^XyINejbgfg>ZNPN@m4{L>O#6-;06qIXxV_-^Lf0NQ z0M6}cY;8YHw;s3Y-dH`zqX%~-8W#C9rCrgm$m?fs>(SC5xWG_|-h)1N`W-l2U{|5V zqTMVOU_K40BuqzBOhMis$fw-v1-K?>*8d^ z3Kj+Issq(ok_%^l@pZ<`Y|=zFW3HBisu?h{gRK?9swc3x=$&RLFciY!^5Jwj$mg`( zmMIn>pMydk=F=(CvpLh{JGvf0T^Jd{+6s>ihUE6ODFAu-a8f3MA`?N8;EM$SxjOp1 z+$Z#+zY`Ah#WA<+<=ba1d6RGABw~<=!N>Or0A|0aEX-|L(J{*!jpS;zRxIOznB2US zTW+*kD>nSoEW`Z~89DvkP|=D4e{n1)4<(J#GH%gE!;qg-gS<4xy8b0^@?Y~C{o(%( T#vwV#00000NkvXXu0mjfPTDLl literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/signal_light_yellow.png b/Resources/Textures/_CP14/Effects/Magic/spells_icons.rsi/signal_light_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..4a3d195bdaf54cd8bbde6d88f51b1388a635ff00 GIT binary patch literal 611 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 P`U2@cG}f-XZx{K0MF84t literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi/meta.json b/Resources/Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi/meta.json index 94ffa2be6e..d72cd21664 100644 --- a/Resources/Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi/meta.json +++ b/Resources/Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC0-1.0", - "copyright": "Created by TheShuEd (github) for ss14", + "copyright": "Core created by TheShuEd, connective created by omsoyk", "size": { "x": 32, "y": 32 @@ -11,13 +11,19 @@ "name": "core" }, { - "name": "pulse", + "name": "connective", "delays": [ [ - 0.15625, - 0.15625, - 0.15625, - 0.15625 + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15 ] ] } diff --git a/Resources/Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi/pulse.png b/Resources/Textures/_CP14/Structures/Dungeon/demiplan_rift_core.rsi/pulse.png deleted file mode 100644 index c9e239e51584f6ddf9910ba698d7c7f64c504741..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zbv<1iLn`LH zy|tV7kbyu$V)JgE0~{TaMy}U9pZ6JFN)t+R=sCbpazf<9rNpP6N%0Q<)fGh?_I*Ce zcl4$N&@hJm$8H^3&3`Xs?RxL&dV&XU9crKc$0qy_f9cDb;H`0S&pV{m;-|k`{2{V? zfmnsZC!3U~sTbx%EA+|7pBCLYYhUg4=@(`dKCO<=sbrocvOqiIlY;Szoa1Xn4@w-Z zZ+hcsoukSRvIYeHd0wjf6W05c?eYDk9s9q{=