Skip to content

Commit

Permalink
Merge branch 'SerbiaStrong-220:master' into spook
Browse files Browse the repository at this point in the history
  • Loading branch information
spo9k committed Sep 24, 2024
2 parents 357265a + 0181bdf commit 381f47b
Show file tree
Hide file tree
Showing 8 changed files with 154 additions and 112 deletions.
11 changes: 6 additions & 5 deletions Content.Server/Radio/EntitySystems/RadioSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -265,13 +265,14 @@ private void OnEncryptionChannelsChangeTransmitter(Entity<IntrinsicRadioTransmit

private void OnEncryptionChannelsChangeReceiver(Entity<IntrinsicRadioReceiverComponent> entity, ref EncryptionChannelsChangedEvent args)
{
if (!TryComp<ActiveRadioComponent>(entity.Owner, out var activeRadio))
return;

HashSet<string> channels = entity.Comp.Channels;
HashSet<string> channels = new();
channels.UnionWith(args.Component.Channels);
channels.UnionWith(entity.Comp.Channels);

activeRadio.Channels = new(channels);
if (channels.Count > 0)
EnsureComp<ActiveRadioComponent>(entity.Owner).Channels = channels;
else
RemComp<ActiveRadioComponent>(entity.Owner);
}
//SS220 PAI with encryption keys end
}
168 changes: 96 additions & 72 deletions Content.Server/Weapons/Ranged/Systems/GunSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -163,105 +163,129 @@ public override void Shoot(EntityUid gunUid, GunComponent gun, List<(EntityUid?
break;
case HitscanPrototype hitscan:

EntityUid? lastHit = null;
//SS220 Add hitscan spread begin
var shoots = 1;
Angle[]? angles = null;
if (hitscan.HitscanSpread is { } hitscanSpread)
{
var spreadEvent = new GunGetAmmoSpreadEvent(hitscanSpread.Spread);
RaiseLocalEvent(gunUid, ref spreadEvent);

var from = fromMap;
// can't use map coords above because funny FireEffects
var fromEffect = fromCoordinates;
var dir = mapDirection.Normalized();
angles = LinearSpread(mapAngle - spreadEvent.Spread / 2,
mapAngle + spreadEvent.Spread / 2, hitscanSpread.Count);

//in the situation when user == null, means that the cannon fires on its own (via signals). And we need the gun to not fire by itself in this case
var lastUser = user ?? gunUid;
shoots = hitscanSpread.Count;
}
//SS220 Add hitscan spread end

if (hitscan.Reflective != ReflectType.None)
for (var i = 0; i < shoots; i++) //SS220 Add hitscan spread
{
for (var reflectAttempt = 0; reflectAttempt < 3; reflectAttempt++)
{
var ray = new CollisionRay(from.Position, dir, hitscan.CollisionMask);
var rayCastResults =
Physics.IntersectRay(from.MapId, ray, hitscan.MaxLength, lastUser, false).ToList();
if (!rayCastResults.Any())
break;
EntityUid? lastHit = null;

var from = fromMap;
// can't use map coords above because funny FireEffects
var fromEffect = fromCoordinates;

//SS220 Add hitscan spread begin
//var dir = mapDirection.Normalized();
var dir = angles != null
? angles[i].ToVec()
: mapDirection.Normalized();
//SS220 Add hitscan spread end

var result = rayCastResults[0];
//in the situation when user == null, means that the cannon fires on its own (via signals). And we need the gun to not fire by itself in this case
var lastUser = user ?? gunUid;

// Check if laser is shot from in a container
if (!_container.IsEntityOrParentInContainer(lastUser))
if (hitscan.Reflective != ReflectType.None)
{
for (var reflectAttempt = 0; reflectAttempt < 3; reflectAttempt++)
{
// Checks if the laser should pass over unless targeted by its user
foreach (var collide in rayCastResults)
var ray = new CollisionRay(from.Position, dir, hitscan.CollisionMask);
var rayCastResults =
Physics.IntersectRay(from.MapId, ray, hitscan.MaxLength, lastUser, false).ToList();
if (!rayCastResults.Any())
break;

var result = rayCastResults[0];

// Check if laser is shot from in a container
if (!_container.IsEntityOrParentInContainer(lastUser))
{
if (collide.HitEntity != gun.Target &&
CompOrNull<RequireProjectileTargetComponent>(collide.HitEntity)?.Active == true)
// Checks if the laser should pass over unless targeted by its user
foreach (var collide in rayCastResults)
{
continue;
if (collide.HitEntity != gun.Target &&
CompOrNull<RequireProjectileTargetComponent>(collide.HitEntity)?.Active == true)
{
continue;
}

result = collide;
break;
}

result = collide;
break;
}
}

var hit = result.HitEntity;
lastHit = hit;
var hit = result.HitEntity;
lastHit = hit;

FireEffects(fromEffect, result.Distance, dir.Normalized().ToAngle(), hitscan, hit);
FireEffects(fromEffect, result.Distance, dir.Normalized().ToAngle(), hitscan, hit);

var ev = new HitScanReflectAttemptEvent(user, gunUid, hitscan.Reflective, dir, false);
RaiseLocalEvent(hit, ref ev);
var ev = new HitScanReflectAttemptEvent(user, gunUid, hitscan.Reflective, dir, false);
RaiseLocalEvent(hit, ref ev);

if (!ev.Reflected)
break;
if (!ev.Reflected)
break;

fromEffect = Transform(hit).Coordinates;
from = fromEffect.ToMap(EntityManager, _transform);
dir = ev.Direction;
lastUser = hit;
fromEffect = Transform(hit).Coordinates;
from = fromEffect.ToMap(EntityManager, _transform);
dir = ev.Direction;
lastUser = hit;
}
}
}

if (lastHit != null)
{
var hitEntity = lastHit.Value;
if (hitscan.StaminaDamage > 0f)
_stamina.TakeStaminaDamage(hitEntity, hitscan.StaminaDamage, source: user);
if (lastHit != null)
{
var hitEntity = lastHit.Value;
if (hitscan.StaminaDamage > 0f)
_stamina.TakeStaminaDamage(hitEntity, hitscan.StaminaDamage, source: user);

var dmg = hitscan.Damage;
var dmg = hitscan.Damage;

var hitName = ToPrettyString(hitEntity);
if (dmg != null)
dmg = Damageable.TryChangeDamage(hitEntity, dmg, origin: user);
var hitName = ToPrettyString(hitEntity);
if (dmg != null)
dmg = Damageable.TryChangeDamage(hitEntity, dmg, origin: user);

// check null again, as TryChangeDamage returns modified damage values
if (dmg != null)
{
if (!Deleted(hitEntity))
// check null again, as TryChangeDamage returns modified damage values
if (dmg != null)
{
if (dmg.AnyPositive())
if (!Deleted(hitEntity))
{
_color.RaiseEffect(Color.Red, new List<EntityUid>() { hitEntity }, Filter.Pvs(hitEntity, entityManager: EntityManager));
}
if (dmg.AnyPositive())
{
_color.RaiseEffect(Color.Red, new List<EntityUid>() { hitEntity }, Filter.Pvs(hitEntity, entityManager: EntityManager));
}

// TODO get fallback position for playing hit sound.
PlayImpactSound(hitEntity, dmg, hitscan.Sound, hitscan.ForceSound);
}
// TODO get fallback position for playing hit sound.
PlayImpactSound(hitEntity, dmg, hitscan.Sound, hitscan.ForceSound);
}

if (user != null)
{
Logs.Add(LogType.HitScanHit,
$"{ToPrettyString(user.Value):user} hit {hitName:target} using hitscan and dealt {dmg.GetTotal():damage} damage");
}
else
{
Logs.Add(LogType.HitScanHit,
$"{hitName:target} hit by hitscan dealing {dmg.GetTotal():damage} damage");
if (user != null)
{
Logs.Add(LogType.HitScanHit,
$"{ToPrettyString(user.Value):user} hit {hitName:target} using hitscan and dealt {dmg.GetTotal():damage} damage");
}
else
{
Logs.Add(LogType.HitScanHit,
$"{hitName:target} hit by hitscan dealing {dmg.GetTotal():damage} damage");
}
}
}
}
else
{
FireEffects(fromEffect, hitscan.MaxLength, dir.ToAngle(), hitscan);
}
else
{
FireEffects(fromEffect, hitscan.MaxLength, dir.ToAngle(), hitscan);
}
} //SS220 Add hitscan spread

Audio.PlayPredicted(gun.SoundGunshotModified, gunUid, user);
break;
Expand Down
17 changes: 17 additions & 0 deletions Content.Shared/Weapons/Ranged/HitscanPrototype.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,21 @@ public sealed partial class HitscanPrototype : IPrototype, IShootable
/// </summary>
[DataField("maxLength")]
public float MaxLength = 20f;

//SS220 Add hitscan spread begin
[DataField]
public HitscanSpread? HitscanSpread;
//SS220 Add hitscan spread end
}

//SS220 Add hitscan spread begin
[DataDefinition]
public sealed partial class HitscanSpread
{
[DataField]
public Angle Spread = Angle.FromDegrees(5);

[DataField]
public int Count = 1;
}
//SS220 Add hitscan spread end
56 changes: 24 additions & 32 deletions Resources/Changelog/Changelog220.yml
Original file line number Diff line number Diff line change
@@ -1,36 +1,4 @@
Entries:
- author: Vnoeg
changes:
- message: "\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0430 \u043A\u0430\u0440\
\u0442\u0430 Marathon!"
type: Tweak
id: 11
time: '2024-02-16T11:30:19.0000000+00:00'
url: https://api.github.com/repos/SerbiaStrong-220/space-station-14/pulls/742
- author: ZoNeSRuS
changes:
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u043A\u043D\u043E\
\u043F\u043A\u0430 \"\u0432\u043E\u0437\u0440\u043E\u0436\u0434\u0435\u043D\u0438\
\u0435\""
type: Add
- message: "\u0423\u0434\u0430\u043B\u0435\u043D\u0430 \u0432\u043E\u0437\u043C\u043E\
\u0436\u043D\u043E\u0441\u0442\u044C \"\u0441\u0434\u0430\u0442\u044C\u0441\u044F\
\" \u0432 \u043A\u0440\u0438\u0442\u0435, \u0438\u0441\u043A\u043B\u044E\u0447\
\u0435\u043D\u0438\u0435 \u0436\u0438\u0432\u043E\u0442\u043D\u044B\u0435."
type: Remove
- message: "\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u044B \"\u043F\u043E\u0441\
\u043B\u0435\u0434\u043D\u0438\u0435 \u0441\u043B\u043E\u0432\u0430\". \u0422\
\u0435\u043F\u0435\u0440\u044C \u043F\u043E\u0441\u043B\u0435 \u043D\u0438\u0445\
\ \u0432\u044B \u043D\u0435 \u0441\u043C\u043E\u0436\u0435\u0442\u0435 \u043E\
\u0436\u0438\u0442\u044C."
type: Tweak
- message: "\u041A\u043B\u043E\u043D\u0435\u0440\u043A\u0430 \u0443\u0434\u0430\u043B\
\u0435\u043D\u0430 \u0438 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\
\u0430 \u0432 \u0420\u041D\u0414."
type: Tweak
id: 12
time: '2024-02-17T14:31:14.0000000+00:00'
url: https://api.github.com/repos/SerbiaStrong-220/space-station-14/pulls/741
- author: TheArturZh
changes:
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D \u0440\u0430\u0437\
Expand Down Expand Up @@ -6105,3 +6073,27 @@
id: 516
time: '2024-09-22T13:49:00.0000000+00:00'
url: https://github.com/SerbiaStrong-220/space-station-14/pull/1913
- author: Theywod
changes:
- message: "\u0412 \u0448\u043A\u0430\u0444\u0447\u0438\u043A \u0431\u0440\u0438\
\u0433\u043C\u0435\u0434\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\
\u044B \u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u043D\u044B\u0435 \u043A\
\u0438\u0441\u043B\u043E\u0440\u043E\u0434\u043D\u044B\u0439 \u0438 \u0430\u0437\
\u043E\u0442\u043D\u044B\u0439 \u0431\u0430\u043B\u043B\u043E\u043D\u044B"
type: Add
id: 517
time: '2024-09-23T19:03:19.0000000+00:00'
url: https://github.com/SerbiaStrong-220/space-station-14/pull/1918
- author: Svarshik
changes:
- message: "\u0420\u0435\u0439\u0434\u043E\u0432\u044B\u0439 \u043A\u043E\u0441\u0442\
\u044E\u043C \u0441\u0438\u043D\u0434\u0438\u043A\u0430\u0442\u0430 \u0438\u0437\
\ \u0430\u043F\u043B\u0438\u043D\u043A\u0430 \u042F\u041E \u0442\u0435\u043F\
\u0435\u0440\u044C \u0438\u043C\u0435\u0435\u0442 \u0441\u0442\u0430\u043C\u0438\
\u043D\u0430\u0440\u0435\u0437\u0438\u0441\u0442 \u0432 70%, \u043A\u0430\u043A\
\ \u0443 \u043E\u0431\u044B\u0447\u043D\u043E\u0433\u043E \u0441\u043A\u0430\
\u0444\u0430\u043D\u0434\u0440\u0430 \u042F\u041E."
type: Tweak
id: 518
time: '2024-09-23T19:02:37.0000000+00:00'
url: https://github.com/SerbiaStrong-220/space-station-14/pull/1917
2 changes: 2 additions & 0 deletions Resources/Prototypes/Catalog/Fills/Lockers/security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,8 @@
prob: 0.5
- id: ClothingOuterCoatLabSecurityMedic # Corvax-Resprite
prob: 0.5
- id: OxygenTankFilled #SS220 add-tanks-brigmed
- id: NitrogenTankFilled #SS220 add-tanks-brigmed

- type: entity
id: LockerDetectiveFilled
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@
Piercing: 0.35
Heat: 0.35
Caustic: 0.5
Stamina: 0.3 #SS220 stamina resist fix
- type: ExplosionResistance
damageCoefficient: 0.35
- type: ClothingSpeedModifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -627,9 +627,11 @@
Stamina: 0.1
- type: Item
size: Huge
- type: ClothingSpeedModifier
walkModifier: 0.9 #ss-220 armReb
sprintModifier: 0.9 #ss-220 armReb
#ss220 elite-suitReb begin
#- type: ClothingSpeedModifier
# walkModifier: 0.9 #ss-220 armReb
# sprintModifier: 0.9 #ss-220 armReb
#ss220 elite-suitReb end
- type: HeldSpeedModifier
- type: ToggleableClothing
clothingPrototype: ClothingHeadHelmetHardsuitSyndieElite
Expand Down
3 changes: 3 additions & 0 deletions Resources/Prototypes/SS220/Entities/Objects/Fun/pai.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@
- type: IntrinsicRadioTransmitter
channels:
- Binary
- type: ActiveRadio
channels:
- Binary
- type: DoAfter
- type: Actions
- type: TypingIndicator
Expand Down

0 comments on commit 381f47b

Please sign in to comment.