diff --git a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs index 5c0618ff9f..e1ea4f502a 100644 --- a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs +++ b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs @@ -79,6 +79,7 @@ public sealed class CultRuleSystem : GameRuleSystem private void OnGetBriefing(Entity ent, ref GetBriefingEvent args) { args.Append(Loc.GetString("cult-role-briefing-short")); + args.Append(Loc.GetString("cult-role-briefing-hint")); } private void OnCultistsStateChanged(EntityUid uid, CultistComponent component, MobStateChangedEvent ev) diff --git a/Content.Server/_White/Cult/Pylon/PylonSystem.cs b/Content.Server/_White/Cult/Pylon/PylonSystem.cs index 1dc61c8b55..8c658b8d62 100644 --- a/Content.Server/_White/Cult/Pylon/PylonSystem.cs +++ b/Content.Server/_White/Cult/Pylon/PylonSystem.cs @@ -1,8 +1,8 @@ using System.Linq; using System.Numerics; +using Content.Server.Atmos.Piping.Other.Components; using Content.Server.Body.Components; using Content.Server.Body.Systems; -using Content.Server.Maps; using Content.Shared.Damage; using Content.Shared.Doors.Components; using Content.Shared.Interaction; @@ -11,7 +11,6 @@ using Content.Shared.Mobs.Systems; using Content.Shared.Physics; using Content.Shared.Popups; using Content.Shared.Tag; -using Content.Shared._White.Cult; using Content.Shared._White.Cult.Pylon; using Content.Shared._White.Cult.Systems; using Robust.Server.GameObjects; @@ -55,9 +54,7 @@ public sealed class PylonSystem : EntitySystem private void OnConceal(Entity ent, ref ConcealEvent args) { - ent.Comp.Activated = !args.Conceal; - UpdateAppearance(ent, ent.Comp); - _pointLight.SetEnabled(ent, !args.Conceal); + SetActivated(ent, ent.Comp, !args.Conceal); _physics.SetCanCollide(ent, !args.Conceal); } @@ -229,12 +226,7 @@ public sealed class PylonSystem : EntitySystem if (HasComp(user)) { - comp.Activated = !comp.Activated; - - UpdateAppearance(uid, comp); - - _pointLight.SetEnabled(uid, comp.Activated); - + SetActivated(uid, comp, !comp.Activated); var toggleMsg = Loc.GetString(comp.Activated ? "pylon-toggle-on" : "pylon-toggle-off"); _popupSystem.PopupEntity(toggleMsg, uid); return; @@ -272,4 +264,16 @@ public sealed class PylonSystem : EntitySystem _appearance.SetData(uid, PylonVisuals.Activated, comp.Activated, appearance); } + + private void SetActivated(EntityUid uid, SharedPylonComponent comp, bool activated) + { + comp.Activated = activated; + + if (TryComp(uid, out GasMinerComponent? miner)) + miner.Enabled = activated; + + UpdateAppearance(uid, comp); + + _pointLight.SetEnabled(uid, activated); + } } diff --git a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs index 134af2bfc6..6924c759d6 100644 --- a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs +++ b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Actions.cs @@ -332,7 +332,7 @@ public partial class CultSystem if (success) { _audio.PlayPvs(conceal ? "/Audio/White/Cult/smoke.ogg" : "/Audio/White/Cult/enter_blood.ogg", uid, - AudioParams.Default.WithMaxDistance(2f)); + AudioParams.Default.WithMaxDistance(5f)); _bloodstreamSystem.TryModifyBloodLevel(uid, -2, bloodstream, createPuddle: false); args.Handled = true; } diff --git a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Constructs.cs b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Constructs.cs index e4aabd2734..1cf9f55d3f 100644 --- a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Constructs.cs +++ b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Constructs.cs @@ -1,6 +1,9 @@ -using Content.Shared.Containers.ItemSlots; +using System.Linq; +using Content.Shared._White.Cult.Components; +using Content.Shared.Containers.ItemSlots; using Content.Shared.Mind.Components; using Content.Shared._White.Cult.UI; +using Content.Shared.Weapons.Melee.Events; using Robust.Shared.Containers; using Robust.Shared.Player; using Robust.Shared.Prototypes; @@ -19,6 +22,13 @@ public partial class CultSystem SubscribeLocalEvent(OnShellInit); SubscribeLocalEvent(OnShellRemove); SubscribeLocalEvent(OnShellSelected); + SubscribeLocalEvent(OnMeleeHit); + } + + private void OnMeleeHit(Entity ent, ref MeleeHitEvent args) + { + if (args.HitEntities.Any(e => HasComp(e) || HasComp(e))) + args.BonusDamage = -args.BaseDamage; } private void OnShellSelected(EntityUid uid, ConstructShellComponent component, ConstructFormSelectedEvent args) diff --git a/Resources/Audio/White/Cult/Hammer/fstatk1.ogg b/Resources/Audio/White/Cult/Hammer/fstatk1.ogg new file mode 100644 index 0000000000..cae2e0b4be Binary files /dev/null and b/Resources/Audio/White/Cult/Hammer/fstatk1.ogg differ diff --git a/Resources/Audio/White/Cult/Hammer/fstatk2.ogg b/Resources/Audio/White/Cult/Hammer/fstatk2.ogg new file mode 100644 index 0000000000..9701b997d9 Binary files /dev/null and b/Resources/Audio/White/Cult/Hammer/fstatk2.ogg differ diff --git a/Resources/Audio/White/Cult/Hammer/fstatk3.ogg b/Resources/Audio/White/Cult/Hammer/fstatk3.ogg new file mode 100644 index 0000000000..45644e173a Binary files /dev/null and b/Resources/Audio/White/Cult/Hammer/fstatk3.ogg differ diff --git a/Resources/Audio/White/Cult/Hammer/plspnch1.ogg b/Resources/Audio/White/Cult/Hammer/plspnch1.ogg new file mode 100644 index 0000000000..435e6b381b Binary files /dev/null and b/Resources/Audio/White/Cult/Hammer/plspnch1.ogg differ diff --git a/Resources/Audio/White/Cult/Hammer/plspnch2.ogg b/Resources/Audio/White/Cult/Hammer/plspnch2.ogg new file mode 100644 index 0000000000..4f24460eb1 Binary files /dev/null and b/Resources/Audio/White/Cult/Hammer/plspnch2.ogg differ diff --git a/Resources/Audio/White/Cult/Hammer/plspnch3.ogg b/Resources/Audio/White/Cult/Hammer/plspnch3.ogg new file mode 100644 index 0000000000..e313cf23e3 Binary files /dev/null and b/Resources/Audio/White/Cult/Hammer/plspnch3.ogg differ diff --git a/Resources/Audio/White/Cult/Hammer/plspnch4.ogg b/Resources/Audio/White/Cult/Hammer/plspnch4.ogg new file mode 100644 index 0000000000..19c92c1bca Binary files /dev/null and b/Resources/Audio/White/Cult/Hammer/plspnch4.ogg differ diff --git a/Resources/Audio/White/Cult/Hammer/plspnch5.ogg b/Resources/Audio/White/Cult/Hammer/plspnch5.ogg new file mode 100644 index 0000000000..e2562d16cd Binary files /dev/null and b/Resources/Audio/White/Cult/Hammer/plspnch5.ogg differ diff --git a/Resources/Audio/White/Cult/Hammer/plspnch6.ogg b/Resources/Audio/White/Cult/Hammer/plspnch6.ogg new file mode 100644 index 0000000000..01d1368c32 Binary files /dev/null and b/Resources/Audio/White/Cult/Hammer/plspnch6.ogg differ diff --git a/Resources/Locale/ru-RU/White/cult.ftl b/Resources/Locale/ru-RU/White/cult.ftl index e6d8326e9a..fcaf440897 100644 --- a/Resources/Locale/ru-RU/White/cult.ftl +++ b/Resources/Locale/ru-RU/White/cult.ftl @@ -6,6 +6,7 @@ cult-role-greeting = Слава Нар`си! cult-role-briefing-short = Используйте '^' для связи с другими членами культа. +cult-role-briefing-hint = Нажмите правой кнопкой мыши по своему персонажу и выберите меню 'Культ' для действий, связанных с культом. cult-cond-cultwin = Культ одержал победу cult-cond-cultfailure = Экипаж уничтожил культ diff --git a/Resources/Locale/ru-RU/cult/abilities.ftl b/Resources/Locale/ru-RU/cult/abilities.ftl index 1fd0c0b66f..59c399c6e6 100644 --- a/Resources/Locale/ru-RU/cult/abilities.ftl +++ b/Resources/Locale/ru-RU/cult/abilities.ftl @@ -28,7 +28,7 @@ ent-InstantActionBloodRites = Кровавые Обряды .desc = Высасывает кровь и исцеляет вас. ent-ActionCultStun = Оглушение - .desc = Сильное заклинание, которое оглушает и обезмолвливает жертв. + .desc = Сильное заклинание, которое оглушает и обезмолвливает жертв. Не работает на священника и на экипаж с чипом защиты разума. ent-ActionCultShadowShackles = Теневые Узы .desc = Бесшумное заклинание, которое наложит на человека теневые наручники и заставит вашу жертву замолчать на 10 секунд. diff --git a/Resources/Locale/ru-RU/cult/cult-structure.ftl b/Resources/Locale/ru-RU/cult/cult-structure.ftl index 7246b6dca5..81b2b4573c 100644 --- a/Resources/Locale/ru-RU/cult/cult-structure.ftl +++ b/Resources/Locale/ru-RU/cult/cult-structure.ftl @@ -15,6 +15,8 @@ ent-CultGirder = руническая балка .desc = Большой конструктивный элемент, изготовленный из металла. На этом есть руна. ent-AirlockGlassCult = рунический шлюз .desc = Странный стеклянный шлюз с руной. +ent-WallForceCult = светящаяся стена + .desc = Нечестивый щит, блокирующий все атаки. cult-structure-craft-not-enough-metal = Недостаточно металла. cult-structure-craft-craft-failed = Не удалось начать постройку. cult-structure-craft-blocked = Что-то мешает построить. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml index 51025f1645..5483a54eab 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml @@ -12,6 +12,10 @@ types: Blunt: 10 Structural: 10 + soundHit: + collection: HammerHit + soundSwing: + collection: HammerMiss - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/_White/Actions/constuct_actions.yml b/Resources/Prototypes/_White/Actions/constuct_actions.yml index 1158ceef64..3f94a33835 100644 --- a/Resources/Prototypes/_White/Actions/constuct_actions.yml +++ b/Resources/Prototypes/_White/Actions/constuct_actions.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity id: InstantActionArtificerCreateSoulStone name: artificer-create-soul-stone-action-name description: artificer-create-soul-stone-action-description @@ -98,5 +98,10 @@ icon: sprite: /Textures/White/Cult/actions_cult.rsi state: cultforcewall - useDelay: 35 - event: !type:JuggernautCreateWallActionEvent + sound: !type:SoundPathSpecifier + path: /Audio/Magic/forcewall.ogg + useDelay: 40 + event: !type:InstantSpawnSpellEvent + prototype: WallForceCult + posData: !type:TargetInFront + preventCollide: false diff --git a/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml b/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml index 21bd42b022..09f56449dc 100644 --- a/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml +++ b/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml @@ -69,6 +69,11 @@ graph: CultPylon node: pylon - type: Concealable + - type: AtmosDevice + - type: GasMiner + maxExternalPressure: 100 + spawnAmount: 10 + spawnGas: Oxygen - type: entity id: AltarTome diff --git a/Resources/Prototypes/_White/Entities/Cult/constructs.yml b/Resources/Prototypes/_White/Entities/Cult/constructs.yml index 25704d1d7a..96a456250d 100644 --- a/Resources/Prototypes/_White/Entities/Cult/constructs.yml +++ b/Resources/Prototypes/_White/Entities/Cult/constructs.yml @@ -76,6 +76,8 @@ tags: - CannotSuicide - DoorBumpOpener + - type: NameIdentifier + group: Construct - type: entity id: JuggernautConstruct @@ -102,6 +104,10 @@ types: Structural: 90 Blunt: 25 + soundHit: + collection: HammerHit + soundSwing: + collection: HammerMiss - type: entity id: ArtificerConstruct @@ -170,9 +176,11 @@ attackRate: 1 damage: types: - Blunt: 10 + Piercing: 10 Slash: 10 Structural: 40 + soundHit: + path: /Audio/Weapons/bladeslice.ogg - type: entity id: ReaperConstruct @@ -200,9 +208,11 @@ attackRate: 1 damage: types: - Blunt: 20 + Piercing: 20 Slash: 20 Structural: 80 + soundHit: + path: /Audio/Weapons/bladeslice.ogg - type: entity id: ConstructShell @@ -229,3 +239,7 @@ containers: Shard: !type:ContainerSlot - type: CultItem + +- type: nameIdentifierGroup + id: Construct + prefix: CO diff --git a/Resources/Prototypes/_White/Entities/Cult/other_structures.yml b/Resources/Prototypes/_White/Entities/Cult/other_structures.yml index e0c34eef09..09bb9842d6 100644 --- a/Resources/Prototypes/_White/Entities/Cult/other_structures.yml +++ b/Resources/Prototypes/_White/Entities/Cult/other_structures.yml @@ -128,3 +128,16 @@ concealedDesc: Большой металлический каркас; Необходимо покрыть листами металла, чтобы он считался стеной. revealedName: руническая балка revealedDesc: Большой конструктивный элемент, изготовленный из металла. На этом есть руна. + +- type: entity + id: WallForceCult + parent: WallForce + name: glowing wall + description: An unholy shield that blocks all attacks. + components: + - type: Sprite + sprite: White/Cult/Structures/cult_shield.rsi + state: icon + - type: Icon + sprite: White/Cult/Structures/cult_shield.rsi + state: icon diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml index 08227d1b40..b2c7310c8d 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml @@ -413,6 +413,10 @@ types: Blunt: 24 Structural: 80 + soundHit: + collection: HammerHit + soundSwing: + collection: HammerMiss - type: Item size: Huge sprite: White/Objects/Weapons/Chaplain/hammer.rsi diff --git a/Resources/Prototypes/_White/SoundCollections/hammer.yml b/Resources/Prototypes/_White/SoundCollections/hammer.yml new file mode 100644 index 0000000000..7e3dd1b425 --- /dev/null +++ b/Resources/Prototypes/_White/SoundCollections/hammer.yml @@ -0,0 +1,16 @@ +- type: soundCollection + id: HammerHit + files: + - /Audio/White/Cult/Hammer/plspnch1.ogg + - /Audio/White/Cult/Hammer/plspnch2.ogg + - /Audio/White/Cult/Hammer/plspnch3.ogg + - /Audio/White/Cult/Hammer/plspnch4.ogg + - /Audio/White/Cult/Hammer/plspnch5.ogg + - /Audio/White/Cult/Hammer/plspnch6.ogg + +- type: soundCollection + id: HammerMiss + files: + - /Audio/White/Cult/Hammer/fstatk1.ogg + - /Audio/White/Cult/Hammer/fstatk2.ogg + - /Audio/White/Cult/Hammer/fstatk3.ogg diff --git a/Resources/Textures/White/Cult/Structures/cult_shield.rsi/icon.png b/Resources/Textures/White/Cult/Structures/cult_shield.rsi/icon.png new file mode 100644 index 0000000000..a2087a18d0 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_shield.rsi/icon.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_shield.rsi/meta.json b/Resources/Textures/White/Cult/Structures/cult_shield.rsi/meta.json new file mode 100644 index 0000000000..cd2e188dde --- /dev/null +++ b/Resources/Textures/White/Cult/Structures/cult_shield.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1 + ] + ] + } + ] +}