diff --git a/Content.Shared/Weapons/Reflect/ReflectComponent.cs b/Content.Shared/Weapons/Reflect/ReflectComponent.cs index 724b4ae697..b6959dbf34 100644 --- a/Content.Shared/Weapons/Reflect/ReflectComponent.cs +++ b/Content.Shared/Weapons/Reflect/ReflectComponent.cs @@ -30,6 +30,20 @@ public sealed partial class ReflectComponent : Component [DataField("soundOnReflect")] public SoundSpecifier? SoundOnReflect = new SoundPathSpecifier("/Audio/Weapons/Guns/Hits/laser_sear_wall.ogg"); + + // Sunrise-Start + [ViewVariables(VVAccess.ReadWrite)] + [DataField, AutoNetworkedField] + public string? Slot; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField, AutoNetworkedField] + public bool NeedHand; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField, AutoNetworkedField] + public bool NeedActiveHand; + // Sunrise-End } [Flags] diff --git a/Content.Shared/Weapons/Reflect/ReflectSystem.cs b/Content.Shared/Weapons/Reflect/ReflectSystem.cs index 1c682678ec..03bc7c3350 100644 --- a/Content.Shared/Weapons/Reflect/ReflectSystem.cs +++ b/Content.Shared/Weapons/Reflect/ReflectSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Alert; using Content.Shared.Audio; using Content.Shared.Database; using Content.Shared.Hands; +using Content.Shared.Hands.EntitySystems; using Content.Shared.Inventory; using Content.Shared.Inventory.Events; using Content.Shared.Item.ItemToggle; @@ -38,6 +39,7 @@ public sealed class ReflectSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly SharedHandsSystem _handsSystem = default!; public override void Initialize() { @@ -62,7 +64,7 @@ public sealed class ReflectSystem : EntitySystem foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.All & ~SlotFlags.POCKET)) { - if (!TryReflectHitscan(uid, ent, args.Shooter, args.SourceItem, args.Direction, out var dir)) + if (!TryReflectHitscan(uid, ent, args.Shooter, args.SourceItem, args.Direction, args.Reflective, out var dir)) // Sunrise-Edit continue; args.Direction = dir.Value; @@ -158,13 +160,12 @@ public sealed class ReflectSystem : EntitySystem private void OnReflectHitscan(EntityUid uid, ReflectComponent component, ref HitScanReflectAttemptEvent args) { - if (args.Reflected || - (component.Reflects & args.Reflective) == 0x0) + if (args.Reflected) // Sunrise-Edit { return; } - if (TryReflectHitscan(uid, uid, args.Shooter, args.SourceItem, args.Direction, out var dir)) + if (TryReflectHitscan(uid, uid, args.Shooter, args.SourceItem, args.Direction, args.Reflective, out var dir)) // Sunrise-Edit { args.Direction = dir.Value; args.Reflected = true; @@ -177,6 +178,7 @@ public sealed class ReflectSystem : EntitySystem EntityUid? shooter, EntityUid shotSource, Vector2 direction, + ReflectType reflective, // Sunrise-Edit [NotNullWhen(true)] out Vector2? newDirection) { if (!TryComp(reflector, out var reflect) || @@ -187,6 +189,52 @@ public sealed class ReflectSystem : EntitySystem return false; } + // Sunrise-Start + if ((reflect.Reflects & reflective) == 0x0) + { + newDirection = null; + return false; + } + + if (reflect.Slot != null && + !_inventorySystem.TryGetSlotEntity(user, reflect.Slot, out var slotEntity) && + slotEntity != reflector) + { + newDirection = null; + return false; + } + + if (reflect.NeedHand) + { + var inHand = false; + var hands = _handsSystem.EnumerateHands(user); + { + foreach (var hand in hands) + { + if (hand.HeldEntity == reflector) + { + inHand = true; + } + } + } + + if (!inHand) + { + newDirection = null; + return false; + } + } + + if (reflect.NeedActiveHand && !_handsSystem.TryGetActiveItem(user, out var activeItem)) + { + if (activeItem != reflector) + { + newDirection = null; + return false; + } + } + // Sunrise-End + if (_netManager.IsServer) { _popup.PopupEntity(Loc.GetString("reflect-shot"), user); diff --git a/Resources/Changelog/ChangelogSunrise.yml b/Resources/Changelog/ChangelogSunrise.yml index 4749f86434..07397caff4 100644 --- a/Resources/Changelog/ChangelogSunrise.yml +++ b/Resources/Changelog/ChangelogSunrise.yml @@ -7230,3 +7230,35 @@ type: Add id: 507 time: '2024-12-05T11:53:49.428876+00:00' +- author: VigersRay + changes: + - message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D \u043E\u0442\u0440\ + \u0430\u0436\u0430\u044E\u0449\u0438\u0439 \u0431\u0440\u043E\u043D\u0435\u0436\ + \u0438\u043B\u0435\u0442. \u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\ + \ \u043E\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u043F\u0443\u043B\u0438\ + , \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043E\u0442\u0440\u0430\ + \u0436\u0430\u0435\u0442 \u043A\u043E\u0433\u0434\u0430 \u0432 \u0440\u0443\u043A\ + \u0430\u0445, \u0431\u043E\u043B\u044C\u0448\u0435 \u043E\u0442\u0440\u0430\u0436\ + \u0435\u043D\u0438\u0435 \u043D\u0435 \u0440\u0430\u0432\u043D\u043E 100%." + type: Fix + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u0434\u043B\u044F \u043E\u0442\ + \u0440\u0430\u0436\u0435\u043D\u0438\u044F \u0441\u043D\u0430\u0440\u044F\u0434\ + \u043E\u0432 \u043F\u0440\u0438 \u043F\u043E\u043C\u043E\u0449\u0438 \u043E\u0440\ + \u0443\u0436\u0438\u044F \u0431\u043B\u0438\u0436\u043D\u0435\u0433\u043E \u0431\ + \u043E\u044F \u0435\u0433\u043E \u043D\u0443\u0436\u043D\u043E \u0434\u0435\u0440\ + \u0436\u0430\u0442\u044C \u0432 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0439\ + \ \u0440\u0443\u043A\u0435." + type: Tweak + - message: "\u041E\u0442\u0440\u0430\u0436\u0430\u044E\u0449\u0438\u0435 \u0449\u0438\ + \u0442\u044B \u0442\u0435\u043F\u0435\u0440\u044C \u0440\u0430\u0431\u043E\u0442\ + \u0430\u044E\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043A\u043E\u0433\u0434\ + \u0430 \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0432 \u0440\u0443\ + \u043A\u0430\u0445." + type: Tweak + - message: "\u041F\u0440\u043E\u0442\u0438\u0432\u043E\u043B\u0430\u0437\u0435\u0440\ + \u043D\u044B\u0439 \u0449\u0438\u0442 \u0442\u0435\u043F\u0435\u0440\u044C \u043E\ + \u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u043B\u0430\u0437\u0435\u0440\u044B\ + \ \u0441 \u0448\u0430\u043D\u0441\u043E\u043C \u0432 75%." + type: Tweak + id: 508 + time: '2024-12-05T11:59:20.701354+00:00' diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index 35894c6786..37ce7bfe51 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -95,9 +95,10 @@ Piercing: 0.9 Heat: 0.4 # this technically means it protects against fires pretty well? -heat is just for lasers and stuff, not atmos temperature - type: Reflect - reflectProb: 1 + reflectProb: 0.8 reflects: - Energy + slot: outerClothing # Sunrise-Edit - type: entity parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing, BaseSyndicateContraband ] @@ -387,4 +388,4 @@ - type: ExplosionResistance damageCoefficient: 0.5 - type: GroupExamine - - type: Unremoveable \ No newline at end of file + - type: Unremoveable diff --git a/Resources/Prototypes/Entities/Objects/Shields/shields.yml b/Resources/Prototypes/Entities/Objects/Shields/shields.yml index be456cf3f1..e8abf658b9 100644 --- a/Resources/Prototypes/Entities/Objects/Shields/shields.yml +++ b/Resources/Prototypes/Entities/Objects/Shields/shields.yml @@ -102,6 +102,13 @@ Heat: 0.5 flatReductions: Heat: 1 + # Sunrise-Start + - type: Reflect + reflectProb: 0.75 + reflects: + - Energy + needHand: true + # Sunrise-End - type: entity name: riot bullet shield @@ -332,6 +339,7 @@ reflectProb: 0.95 reflects: - Energy + needHand: true # Sunrise-Edit - type: Blocking #Mirror shield reflects heat/laser, but is relatively weak to everything else. passiveBlockModifier: coefficients: @@ -421,6 +429,7 @@ reflectProb: 0.95 reflects: - Energy + needHand: true # Sunrise-Edit - type: Blocking passiveBlockModifier: coefficients: @@ -579,4 +588,4 @@ acts: [ "Destruction" ] - !type:PlaySoundBehavior sound: - collection: MetalBreak \ No newline at end of file + collection: MetalBreak diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baguette.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baguette.yml index 25830216ff..477fc7a1b9 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baguette.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baguette.yml @@ -13,3 +13,4 @@ - type: Reflect reflectProb: 0.05 spread: 90 + needActiveHand: true diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index 59f1b3648c..bab25e4bc4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -69,8 +69,9 @@ - state: inhand-right-blade shader: unshaded - type: Reflect - reflectProb: .20 + reflectProb: .35 spread: 45 + needActiveHand: true # Sunrise-start - type: Tag tags: @@ -230,6 +231,7 @@ - type: Reflect reflectProb: .15 spread: 45 + needActiveHand: true - type: Tag tags: - Write @@ -321,7 +323,7 @@ wieldSound: null # esword light sound instead - type: MeleeWeapon wideAnimationRotation: -135 - attackRate: 1.75 + attackRate: 2 angle: 100 damage: types: @@ -339,8 +341,9 @@ size: Small sprite: Objects/Weapons/Melee/e_sword_double-inhands.rsi - type: Reflect - reflectProb: .40 + reflectProb: .50 spread: 90 + needActiveHand: true - type: entity suffix: One-Handed, For Borgs diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml index 44e98538ad..a7f131cf90 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml @@ -35,8 +35,11 @@ soundHit: path: /Audio/Weapons/bladeslice.ogg - type: Reflect - reflectProb: .1 + reflects: + - NonEnergy + reflectProb: 0.20 spread: 90 + needActiveHand: true - type: Item sprite: Objects/Weapons/Melee/captain_sabre.rsi - type: Tag @@ -98,6 +101,9 @@ - Back - Belt - type: Reflect + reflectProb: 0.40 + spread: 90 + needActiveHand: true - type: entity name: machete @@ -186,6 +192,7 @@ - type: Reflect reflectProb: .25 spread: 90 + needActiveHand: true - type: Item size: Ginormous sprite: Objects/Weapons/Melee/Throngler-in-hand.rsi diff --git a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Melee/sword.yml index 9c02c45d61..475e436c5d 100644 --- a/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/_Sunrise/Entities/Objects/Weapons/Melee/sword.yml @@ -12,10 +12,10 @@ wideAnimationRotation: -135 angle: 0 animation: WeaponArcThrust - attackRate: 1 + attackRate: 1.2 damage: types: - Piercing: 15 + Piercing: 14 resistanceBypass: true soundHit: path: /Audio/Weapons/bladeslice.ogg @@ -34,8 +34,9 @@ - type: Reflect reflects: - NonEnergy - reflectProb: 0.10 + reflectProb: 0.15 spread: 90 + needActiveHand: true - type: Item sprite: _Sunrise/Objects/Weapons/Melee/syndicate_rapier.rsi - type: Tag