Merge remote-tracking branch 'origin/master'

This commit is contained in:
Vigers Ray 2024-12-04 02:48:38 +03:00
commit bfd528aecb
64 changed files with 1058 additions and 354 deletions

View file

@ -1,3 +1,4 @@
using System.Linq;
using System.Numerics;
using Content.Client.Animations;
using Content.Client.Gameplay;
@ -21,6 +22,7 @@ using Robust.Shared.Input;
using Robust.Shared.Map;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
using SharedGunSystem = Content.Shared.Weapons.Ranged.Systems.SharedGunSystem;
using TimedDespawnComponent = Robust.Shared.Spawners.TimedDespawnComponent;
@ -42,6 +44,9 @@ public sealed partial class GunSystem : SharedGunSystem
[ValidatePrototypeId<EntityPrototype>]
public const string HitscanProto = "HitscanEffect";
[ValidatePrototypeId<EntityPrototype>]
public const string HitscanTracerProto = "HitscanEffectTracer";
public bool SpreadOverlay
{
get => _spreadOverlay;
@ -94,47 +99,124 @@ public sealed partial class GunSystem : SharedGunSystem
CreateEffect(gunUid, args, gunUid);
}
private IEnumerable<EntityCoordinates> GenerateTracerPath(EntityCoordinates from, float distance, Angle angle, float stepDistance = 1f)
{
var steps = Math.Max(1, (int)Math.Ceiling(distance / stepDistance));
for (var i = 0; i <= steps; i++)
{
yield return from.Offset(angle.ToVec() * (distance / steps) * i);
}
}
private void OnHitscan(HitscanEvent ev)
{
// ALL I WANT IS AN ANIMATED EFFECT
const float tracerInterval = 0.01f;
var activeTracers = new Dictionary<int, EntityUid>();
foreach (var a in ev.Sprites)
{
if (a.Sprite is not SpriteSpecifier.Rsi rsi)
if (a.sprite is not SpriteSpecifier.Rsi rsi)
continue;
var coords = GetCoordinates(a.coordinates);
var startCoords = GetCoordinates(a.coordinates);
if (Deleted(coords.EntityId))
if (Deleted(startCoords.EntityId))
continue;
var ent = Spawn(HitscanProto, coords);
var sprite = Comp<SpriteComponent>(ent);
var xform = Transform(ent);
xform.LocalRotation = a.angle;
sprite[EffectLayers.Unshaded].AutoAnimated = false;
sprite.LayerSetSprite(EffectLayers.Unshaded, rsi);
sprite.LayerSetState(EffectLayers.Unshaded, rsi.RsiState);
sprite.Scale = new Vector2(a.Distance, 1f);
sprite[EffectLayers.Unshaded].Visible = true;
var anim = new Animation()
if (a.effectType == EffectType.Tracer)
{
Length = TimeSpan.FromSeconds(0.48f),
AnimationTracks =
var tracePath = GenerateTracerPath(startCoords, a.distance, a.angle);
var entityCoordinatesEnumerable = tracePath.ToList();
var stepIndex = 0;
foreach (var stepCoords in entityCoordinatesEnumerable)
{
new AnimationTrackSpriteFlick()
var localIndex = stepIndex;
var delay = localIndex * tracerInterval;
Timer.Spawn(TimeSpan.FromSeconds(delay), () =>
{
LayerKey = EffectLayers.Unshaded,
KeyFrames =
if (activeTracers.TryGetValue(localIndex, out var existingTracer) && EntityManager.EntityExists(existingTracer))
{
new AnimationTrackSpriteFlick.KeyFrame(rsi.RsiState, 0f),
EntityManager.DeleteEntity(existingTracer);
}
var tracerEntity = CreateTracerEffect(stepCoords, a.angle, rsi);
activeTracers[localIndex] = tracerEntity;
});
stepIndex++;
}
}
else if (a.effectType == EffectType.Static)
{
CreateStaticEffect(startCoords, a.angle, rsi, a.distance);
}
}
}
private EntityUid CreateTracerEffect(EntityCoordinates coords, Angle angle, SpriteSpecifier.Rsi rsi)
{
var ent = Spawn(HitscanTracerProto, coords);
var sprite = Comp<SpriteComponent>(ent);
var xform = Transform(ent);
xform.LocalRotation = angle;
sprite[EffectLayers.Unshaded].AutoAnimated = false;
sprite.LayerSetSprite(EffectLayers.Unshaded, rsi);
sprite.LayerSetState(EffectLayers.Unshaded, rsi.RsiState);
sprite.Scale = new Vector2(1f, 1f);
sprite[EffectLayers.Unshaded].Visible = true;
var anim = new Animation()
{
Length = TimeSpan.FromSeconds(0.48f),
AnimationTracks =
{
new AnimationTrackSpriteFlick()
{
LayerKey = EffectLayers.Unshaded,
KeyFrames =
{
new AnimationTrackSpriteFlick.KeyFrame(rsi.RsiState, 0f),
}
}
};
}
};
_animPlayer.Play(ent, anim, "hitscan-effect");
}
_animPlayer.Play(ent, anim, "hitscan-effect");
return ent;
}
private void CreateStaticEffect(EntityCoordinates coords, Angle angle, SpriteSpecifier.Rsi rsi, float distance)
{
var ent = Spawn(HitscanProto, coords);
var sprite = Comp<SpriteComponent>(ent);
var xform = Transform(ent);
xform.LocalRotation = angle;
sprite[EffectLayers.Unshaded].AutoAnimated = false;
sprite.LayerSetSprite(EffectLayers.Unshaded, rsi);
sprite.LayerSetState(EffectLayers.Unshaded, rsi.RsiState);
sprite.Scale = new Vector2(distance, 1f);
sprite[EffectLayers.Unshaded].Visible = true;
var anim = new Animation()
{
Length = TimeSpan.FromSeconds(0.48f),
AnimationTracks =
{
new AnimationTrackSpriteFlick()
{
LayerKey = EffectLayers.Unshaded,
KeyFrames =
{
new AnimationTrackSpriteFlick.KeyFrame(rsi.RsiState, 0f),
}
}
}
};
_animPlayer.Play(ent, anim, "hitscan-effect");
}
public override void Update(float frameTime)

View file

@ -1,6 +1,7 @@
using Content.Server.Body.Components;
using Content.Server.Body.Systems;
using Content.Server.Chemistry.Components;
using Content.Server.Weapons.Ranged.Components;
using Content.Shared.Chemistry.EntitySystems;
using Content.Shared.Chemistry.Events;
using Content.Shared.Inventory;
@ -8,6 +9,7 @@ using Content.Shared.Popups;
using Content.Shared.Projectiles;
using Content.Shared.Tag;
using Content.Shared.Weapons.Melee.Events;
using Content.Shared.Weapons.Ranged.Events;
using Robust.Shared.Collections;
namespace Content.Server.Chemistry.EntitySystems;
@ -31,6 +33,7 @@ public sealed class SolutionInjectOnCollideSystem : EntitySystem
SubscribeLocalEvent<SolutionInjectOnEmbedComponent, EmbedEvent>(HandleEmbed);
SubscribeLocalEvent<MeleeChemicalInjectorComponent, MeleeHitEvent>(HandleMeleeHit);
SubscribeLocalEvent<SolutionInjectWhileEmbeddedComponent, InjectOverTimeEvent>(OnInjectOverTime);
SubscribeLocalEvent<SolutionInjectOnProjectileHitComponent, HitscanAmmoShotEvent>(HandleHitscanHit);
}
private void HandleProjectileHit(Entity<SolutionInjectOnProjectileHitComponent> entity, ref ProjectileHitEvent args)
@ -38,6 +41,11 @@ public sealed class SolutionInjectOnCollideSystem : EntitySystem
DoInjection((entity.Owner, entity.Comp), args.Target, args.Shooter);
}
private void HandleHitscanHit(Entity<SolutionInjectOnProjectileHitComponent> entity, ref HitscanAmmoShotEvent args)
{
DoInjection((entity.Owner, entity.Comp), args.Target, args.Shooter);
}
private void HandleEmbed(Entity<SolutionInjectOnEmbedComponent> entity, ref EmbedEvent args)
{
DoInjection((entity.Owner, entity.Comp), args.Embedded, args.Shooter);

View file

@ -136,6 +136,38 @@ public sealed partial class GunSystem : SharedGunSystem
Dirty(ent!.Value, cartridge);
break;
case HitScanCartridgeAmmoComponent hitScanCartridge:
var hitscanProto = ProtoManager.Index<HitscanPrototype>(hitScanCartridge.Prototype);
if (TryComp<HitScanSpreadComponent>(ent!.Value, out var hitscanSpreadComp))
{
var spreadEvent = new GunGetAmmoSpreadEvent(hitscanSpreadComp.Spread);
RaiseLocalEvent(gunUid, ref spreadEvent);
var angles = LinearSpread(mapAngle - spreadEvent.Spread / 2,
mapAngle + spreadEvent.Spread / 2, hitscanSpreadComp.Count);
HitscanShoot(fromMap, fromCoordinates, angles[0].ToVec(), hitscanProto, gunUid, user, gun, ent.Value);
for (var i = 1; i < hitscanSpreadComp.Count; i++)
{
HitscanShoot(fromMap, fromCoordinates, angles[i].ToVec(), hitscanProto, gunUid, user, gun, ent.Value);
}
}
else
{
HitscanShoot(fromMap, fromCoordinates, mapDirection, hitscanProto, gunUid, user, gun, ent.Value);
}
SetHitscanCartridgeSpent(ent.Value, hitScanCartridge, true);
if (hitScanCartridge.DeleteOnSpawn)
Del(ent.Value);
if (!hitScanCartridge.DeleteOnSpawn && !Containers.IsEntityInContainer(ent!.Value))
EjectCartridge(ent.Value, angle);
Dirty(ent.Value, hitScanCartridge);
break;
// Ammo shoots itself
case AmmoComponent newAmmo:
if (ent == null)
@ -144,108 +176,7 @@ public sealed partial class GunSystem : SharedGunSystem
break;
case HitscanPrototype hitscan:
EntityUid? lastHit = null;
var from = fromMap;
// can't use map coords above because funny FireEffects
var fromEffect = fromCoordinates;
var dir = mapDirection.Normalized();
//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;
if (hitscan.Reflective != ReflectType.None)
{
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;
var result = rayCastResults[0];
// Check if laser is shot from in a container
if (!_container.IsEntityOrParentInContainer(lastUser))
{
// Checks if the laser should pass over unless targeted by its user
foreach (var collide in rayCastResults)
{
if (collide.HitEntity != gun.Target &&
CompOrNull<RequireProjectileTargetComponent>(collide.HitEntity)?.Active == true)
{
continue;
}
result = collide;
break;
}
}
var hit = result.HitEntity;
lastHit = hit;
FireEffects(fromEffect, result.Distance, dir.Normalized().ToAngle(), hitscan, hit);
var ev = new HitScanReflectAttemptEvent(user, gunUid, hitscan.Reflective, dir, false);
RaiseLocalEvent(hit, ref ev);
if (!ev.Reflected)
break;
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);
var dmg = hitscan.Damage;
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))
{
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);
}
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);
}
Audio.PlayPredicted(gun.SoundGunshotModified, gunUid, user);
HitscanShoot(fromMap, fromCoordinates, mapDirection, hitscan, gunUid, user, gun);
break;
default:
throw new ArgumentOutOfRangeException();
@ -288,6 +219,127 @@ public sealed partial class GunSystem : SharedGunSystem
}
}
private void HitscanShoot(MapCoordinates fromMap,
EntityCoordinates fromCoordinates,
Vector2 mapDirection,
HitscanPrototype hitscan,
EntityUid gunUid,
EntityUid? user,
GunComponent gun,
EntityUid? ammoEnt = null)
{
EntityUid? lastHit = null;
var from = fromMap;
// can't use map coords above because funny FireEffects
var fromEffect = fromCoordinates;
var dir = mapDirection.Normalized();
//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;
EntityUid? hitEntity = null;
if (hitscan.Reflective != ReflectType.None)
{
for (var reflectAttempt = 0; reflectAttempt < 3; reflectAttempt++)
{
var ray = new CollisionRay(from.Position, dir, (int) 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))
{
// Checks if the laser should pass over unless targeted by its user
foreach (var collide in rayCastResults)
{
if (collide.HitEntity != gun.Target &&
CompOrNull<RequireProjectileTargetComponent>(collide.HitEntity)?.Active == true)
{
continue;
}
result = collide;
break;
}
}
var hit = result.HitEntity;
lastHit = hit;
FireEffects(fromEffect, result.Distance, dir.Normalized().ToAngle(), hitscan, hit);
var ev = new HitScanReflectAttemptEvent(user, gunUid, hitscan.Reflective, dir, false);
RaiseLocalEvent(hit, ref ev);
if (!ev.Reflected)
break;
fromEffect = Transform(hit).Coordinates;
from = fromEffect.ToMap(EntityManager, _transform);
dir = ev.Direction;
lastUser = hit;
}
}
if (lastHit != null)
{
hitEntity = lastHit.Value;
if (hitscan.StaminaDamage > 0f)
_stamina.TakeStaminaDamage(hitEntity.Value, hitscan.StaminaDamage, source: user);
var dmg = hitscan.Damage;
var hitName = ToPrettyString(hitEntity);
if (dmg != null)
dmg = Damageable.TryChangeDamage(hitEntity, dmg, hitscan.IgnoreResistances, origin: user);
// check null again, as TryChangeDamage returns modified damage values
if (dmg != null)
{
if (!Deleted(hitEntity))
{
if (dmg.AnyPositive())
{
_color.RaiseEffect(Color.Red, new List<EntityUid>() { hitEntity.Value }, Filter.Pvs(hitEntity.Value, entityManager: EntityManager));
}
// TODO get fallback position for playing hit sound.
PlayImpactSound(hitEntity.Value, 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");
}
}
}
else
{
FireEffects(fromEffect, hitscan.MaxLength, dir.ToAngle(), hitscan);
}
Audio.PlayPredicted(gun.SoundGunshotModified, gunUid, user);
if (hitEntity == null || ammoEnt == null)
return;
RaiseLocalEvent(ammoEnt.Value, new HitscanAmmoShotEvent()
{
Target = hitEntity.Value,
Shooter = user,
});
}
private void ShootOrThrow(EntityUid uid, Vector2 mapDirection, Vector2 gunVelocity, GunComponent gun, EntityUid gunUid, EntityUid? user)
{
if (gun.Target is { } target && !TerminatingOrDeleted(target))
@ -395,7 +447,7 @@ public sealed partial class GunSystem : SharedGunSystem
// Lord
// Forgive me for the shitcode I am about to do
// Effects tempt me not
var sprites = new List<(NetCoordinates coordinates, Angle angle, SpriteSpecifier sprite, float scale)>();
var sprites = new List<(NetCoordinates coordinates, Angle angle, SpriteSpecifier sprite, float scale, EffectType)>();
var gridUid = fromCoordinates.GetGridUid(EntityManager);
var angle = mapDirection;
@ -421,7 +473,7 @@ public sealed partial class GunSystem : SharedGunSystem
var coords = fromCoordinates.Offset(angle.ToVec().Normalized() / 2);
var netCoords = GetNetCoordinates(coords);
sprites.Add((netCoords, angle, hitscan.MuzzleFlash, 1f));
sprites.Add((netCoords, angle, hitscan.MuzzleFlash, 1f, EffectType.Static));
}
if (hitscan.TravelFlash != null)
@ -429,7 +481,14 @@ public sealed partial class GunSystem : SharedGunSystem
var coords = fromCoordinates.Offset(angle.ToVec() * (distance + 0.5f) / 2);
var netCoords = GetNetCoordinates(coords);
sprites.Add((netCoords, angle, hitscan.TravelFlash, distance - 1.5f));
sprites.Add((netCoords, angle, hitscan.TravelFlash, distance - 1.5f, EffectType.Static));
}
if (hitscan.BulletTracer != null)
{
var coords = fromCoordinates.Offset(angle.ToVec().Normalized() / 2);
var netCoords = GetNetCoordinates(coords);
sprites.Add((netCoords, angle, hitscan.BulletTracer, distance - 1.5f, EffectType.Tracer));
}
}
@ -438,15 +497,16 @@ public sealed partial class GunSystem : SharedGunSystem
var coords = fromCoordinates.Offset(angle.ToVec() * distance);
var netCoords = GetNetCoordinates(coords);
sprites.Add((netCoords, angle.FlipPositive(), hitscan.ImpactFlash, 1f));
sprites.Add((netCoords, angle.FlipPositive(), hitscan.ImpactFlash, 1f, EffectType.Static));
}
if (sprites.Count > 0)
{
RaiseNetworkEvent(new HitscanEvent
{
Sprites = sprites,
}, Filter.Pvs(fromCoordinates, entityMan: EntityManager));
Sprites = sprites
},
Filter.Pvs(fromCoordinates, entityMan: EntityManager));
}
}

View file

@ -0,0 +1,14 @@
using Content.Shared.Weapons.Ranged.Systems;
using Robust.Shared.GameStates;
namespace Content.Shared.Projectiles;
[RegisterComponent, NetworkedComponent, Access(typeof(SharedGunSystem))]
public sealed partial class HitScanSpreadComponent : Component
{
[DataField]
public Angle Spread = Angle.FromDegrees(5);
[DataField]
public int Count = 1;
}

View file

@ -39,3 +39,20 @@ public sealed partial class CartridgeAmmoComponent : AmmoComponent
[DataField("soundEject")]
public SoundSpecifier? EjectSound = new SoundCollectionSpecifier("CasingEject");
}
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class HitScanCartridgeAmmoComponent : AmmoComponent
{
[ViewVariables(VVAccess.ReadWrite), DataField("proto", required: true, customTypeSerializer: typeof(PrototypeIdSerializer<HitscanPrototype>))]
public string Prototype = default!;
[ViewVariables(VVAccess.ReadWrite), DataField("spent")]
[AutoNetworkedField]
public bool Spent = false;
[DataField("deleteOnSpawn")]
public bool DeleteOnSpawn;
[DataField("soundEject")]
public SoundSpecifier? EjectSound = new SoundCollectionSpecifier("CasingEject");
}

View file

@ -7,3 +7,10 @@ public sealed class AmmoShotEvent : EntityEventArgs
{
public List<EntityUid> FiredProjectiles = default!;
}
public sealed class HitscanAmmoShotEvent : EntityEventArgs
{
public EntityUid Target = default!;
public EntityUid? Shooter = default!;
}

View file

@ -29,8 +29,11 @@ public sealed partial class HitscanPrototype : IPrototype, IShootable
[ViewVariables(VVAccess.ReadOnly), DataField("impactFlash")]
public SpriteSpecifier? ImpactFlash;
[DataField("bulletTracer")]
public SpriteSpecifier? BulletTracer { get; set; }
[DataField("collisionMask")]
public int CollisionMask = (int) CollisionGroup.Opaque;
public CollisionGroup CollisionMask { get; private set; } = CollisionGroup.Opaque;
/// <summary>
/// What we count as for reflection.
@ -54,4 +57,7 @@ public sealed partial class HitscanPrototype : IPrototype, IShootable
/// </summary>
[DataField("maxLength")]
public float MaxLength = 20f;
[DataField]
public bool IgnoreResistances;
}

View file

@ -472,6 +472,15 @@ public abstract partial class SharedGunSystem : EntitySystem
Appearance.SetData(uid, AmmoVisuals.Spent, spent);
}
protected void SetHitscanCartridgeSpent(EntityUid uid, HitScanCartridgeAmmoComponent hitScanCartridgeAmmo, bool spent)
{
if (hitScanCartridgeAmmo.Spent != spent)
Dirty(uid, hitScanCartridgeAmmo);
hitScanCartridgeAmmo.Spent = spent;
Appearance.SetData(uid, AmmoVisuals.Spent, spent);
}
/// <summary>
/// Drops a single cartridge / shell
/// </summary>
@ -508,12 +517,16 @@ public abstract partial class SharedGunSystem : EntitySystem
if (TryComp<CartridgeAmmoComponent>(uid, out var cartridge))
return cartridge;
if (TryComp<HitScanCartridgeAmmoComponent>(uid, out var hitscan))
return hitscan;
return EnsureComp<AmmoComponent>(uid);
}
protected void RemoveShootable(EntityUid uid)
{
RemCompDeferred<CartridgeAmmoComponent>(uid);
RemCompDeferred<HitScanCartridgeAmmoComponent>(uid);
RemCompDeferred<AmmoComponent>(uid);
}
@ -586,7 +599,7 @@ public abstract partial class SharedGunSystem : EntitySystem
[Serializable, NetSerializable]
public sealed class HitscanEvent : EntityEventArgs
{
public List<(NetCoordinates coordinates, Angle angle, SpriteSpecifier Sprite, float Distance)> Sprites = new();
public List<(NetCoordinates coordinates, Angle angle, SpriteSpecifier sprite, float distance, EffectType effectType)> Sprites = new();
}
}
@ -614,6 +627,12 @@ public enum EffectLayers : byte
Unshaded,
}
public enum EffectType : byte
{
Tracer,
Static
}
[Serializable, NetSerializable]
public enum AmmoVisuals : byte
{

View file

@ -1,10 +1,4 @@
Entries:
- author: VigersRay
changes:
- message: Init
type: Add
id: 1
time: '2024-03-05T22:16:24.059464+00:00'
- author: VigersRay
changes:
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u043E\u0437\u0432\
@ -7075,3 +7069,41 @@
id: 494
time: '2024-12-02T08:18:34.0000000+00:00'
url: https://github.com/space-sunrise/space-station-14/pull/762
- author: KaiserMaus
changes:
- message: "\u0412\u0438\u0437\u043E\u0440 \u041C\u0415\u0425-\u043F\u0438\u043B\
\u043E\u0442\u0430 \u0441\u0438\u043D\u0434\u0438\u043A\u0430\u0442\u0430."
type: Add
id: 495
time: '2024-12-03T23:45:23.0000000+00:00'
url: https://github.com/space-sunrise/space-station-14/pull/769
- author: VigersRay
changes:
- message: "\u0417\u043D\u0430\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0443\
\u0441\u043A\u043E\u0440\u0435\u043D\u0430 \u0441\u043A\u043E\u0440\u043E\u0441\
\u0442\u044C \u043F\u043E\u043B\u0435\u0442\u0430 \u043F\u0443\u043B\u044C \u043E\
\u0433\u043D\u0435\u0441\u0442\u0440\u0435\u043B\u0430."
type: Tweak
id: 496
time: '2024-12-03T23:44:24.0000000+00:00'
url: https://github.com/space-sunrise/space-station-14/pull/755
- author: JunterFox
changes:
- message: "\u0420\u0443\u0447\u043A\u0430 \u0426\u041A \u0434\u043E\u0431\u0430\
\u0432\u043B\u0435\u043D\u0430 \u0432\u043E \u0432\u0442\u043E\u0440\u043E\u0439\
\ \u043A\u0430\u0440\u043C\u0430\u043D \u041F\u0440\u0435\u0434\u0441\u0442\u0430\
\u0432\u0438\u0442\u0435\u043B\u044F NT \u0440\u0430\u0443\u043D\u0434\u0441\
\u0442\u0430\u0440\u0442\u043E\u043C."
type: Add
id: 497
time: '2024-12-03T23:45:34.0000000+00:00'
url: https://github.com/space-sunrise/space-station-14/pull/770
- author: kanopus7
changes:
- message: "\u0410\u0440\u043A\u0430\u043D\u044B \u0442\u0435\u043F\u0435\u0440\u044C\
\ \u043C\u043E\u0433\u0443\u0442 \u043A\u0443\u0448\u0430\u0442\u044C\u0441\u044F\
\ \u0433\u0435\u043D\u043E\u043A\u0440\u0430\u0434\u0430\u043C\u0438."
type: Fix
id: 498
time: '2024-12-03T23:44:58.0000000+00:00'
url: https://github.com/space-sunrise/space-station-14/pull/766

View file

@ -16,8 +16,8 @@ ent-GunSafeShotgunPaladin = safe
ent-GunSafeShotgunTrenchgun4034 = safe
.suffix = Trenchgun 4034
.desc = { ent-GunSafe.desc }
ent-GunSafeSubMachineGunMP38 = safe
.suffix = MP-38
ent-GunSafeEnergyGunPistolSecurity = safe
.suffix = Energy Pistol «Judge»
.desc = { ent-GunSafe.desc }
ent-GunSafeEnergyGun = safe
.suffix = Energy guns

View file

@ -1,2 +1,5 @@
ent-ClothingEyesUniversalMedicalHud = universal medical hud
.desc = A heads-up display that combines the advantages of a medical scanner and chemical analysis glasses.
ent-ClothingEyesHudSyndicateMech = syndicate Mech pilot visor
.desc = The syndicate Mech pilote`s professional head-up display, designed for quick diagnosis of their Mech's status.

View file

@ -22,8 +22,6 @@ ent-HyposprayBorgSyndi = gorlax robot hypospray
.desc = A hypospray that can switch through several reagents.
ent-HolofanProjectorBorg = holofan robot projector
.desc = Stop suicidal passengers from killing everyone during atmos emergencies.
ent-LightMachineGunBorg = machine gun borg
.desc = { ent-BaseItem.desc }
ent-WeaponLauncherChinaLakeBorg = robot china lake
.desc = PLOOP
ent-FireExtinguisherBorg = fire extinguisher borg

View file

@ -629,25 +629,24 @@ station-goal-medical-replenishment =
Одна из наших колоний слишком сильно пострадала от нападения ксеноморфов. В данный момент колония не может нормально функционировать и
все раненные были перемещены на СЦК, потому медицинскому отделу даётся задача произвести следующий список лекарств:[bold]
1. Сигинат (200 унций).
2. Когнизин (200 унций).
2. Дексалин плюс (200 унций).
3. Инсузин (200 унций).
4. Пиразин (200 унций).
5. Дифенилметиламин (200 унций).
6. Эпинефрин (200 унций).
7. Галоперидол (200 унций).
8. Некрозол (100 унций).
8. Некрозол (200 унций).
9. Целлиминол (200 унций).
10. H-32 (200 унций).
11. Оппорозидон (200 унций).
12. Алоксадон (200 унций).
13. Этилредоксразин (200 унций).
14. Лацеринол (100 унций).
15. Пунтктураз (100 унций).
14. Лацеринол (200 унций).
15. Пунтктураз (200 унций).
16. Бруизин (200 унций).
17. Физраствор (200 унций).
18. Дифенгидрамин (200 унций).
19. Лепоразин (100 унций).
20. Дексалин плюс (200 унций).[/bold]
19. Лепоразин (200 унций).[/bold]
⠀Так же необходимо сделать набор, в который войдёт:[bold]
1. Аптечка первой помощи (5 шт.).

View file

@ -16,9 +16,9 @@ ent-GunSafeShotgunPaladin = сейф Паладинов 12
ent-GunSafeShotgunTrenchgun4034 = сейф Тренчганов 4034
.suffix = Санрайз
.desc = { ent-GunSafe.desc }
ent-GunSafeSubMachineGunMP38 = сейф MP-38
ent-GunSafeEnergyGunPistolSecurity = сейф энергетических пистолетов "Судья"
.suffix = Санрайз
.desc = { ent-GunSafe.desc }
ent-GunSafeEnergyGun = сейф энергетических пушек
ent-GunSafeEnergyGun = сейф Тактических энергетических пушек
.suffix = Санрайз
.desc = { ent-GunSafe.desc }

View file

@ -1,2 +1,5 @@
ent-ClothingEyesUniversalMedicalHud = универсальный медицинский визор
.desc = Дисплей, сочетающий в себе преимущества медицинского сканера и очков для химического анализа.
ent-ClothingEyesHudSyndicateMech = визор МЕХ-пилота синдиката
.desc = Профессиональный визор анализирующий в реальном времени состояние МЕХа.

View file

@ -22,8 +22,6 @@ ent-HyposprayBorgSyndi = гипоспрей медицинского кибор
.desc = Версия гипоспрея Горлакса, которая способна регенерировать сразу несколько реагентов.
ent-HolofanProjectorBorg = атмос голопроектор киборга
.desc = { ent-HolofanProjector.desc }
ent-LightMachineGunBorg = L6 SAW киборга
.desc = { ent-BaseWeaponHeavyMachineGun.desc }
ent-WeaponLauncherChinaLakeBorg = China Lake киборга
.desc = { ent-WeaponLauncherChinaLake.desc }
ent-FireExtinguisherBorg = огнетушитель киборга

View file

@ -1,30 +1,30 @@
ent-MagazineLightRifleRubber = магазин (.30 винтовочные резиновые)
.desc = { ent-BaseMagazineLightRifle.desc }
ent-MagazineAK = универсальный магазин автомата калашникова
.desc = Использует патроны калибра .30 мм.
.desc = Использует патроны калибра .30 винтовочные.
ent-MagazineMP38 = магазин ПП MP-38
.desc = Использует патроны калибра .30 мм.
.desc = Использует патроны калибра .35 Авто.
ent-MagazineScorpion = магазин ПП Скорпион
.desc = Использует патроны калибра .30 мм.
.desc = Использует патроны калибра .35 Авто.
ent-MagazineNewVector = магазин Вектора
.desc = Использует патроны калибра .30 мм.
ent-MagazineRPD = магазин RPD
.desc = Использует патроны калибра .30 мм.
ent-MagazineMachineGunMG42 = магазин MG-42
.desc = Использует патроны калибра .30 мм.
ent-MagazineLightMachineGunMG60 = магазин MG-60
.desc = Использует патроны калибра .30 мм.
.desc = Использует патроны калибра .35 Авто.
ent-MagazineRPD = короб РПД
.desc = Короб для РПД с длинной лентой .30 винтовочных.
ent-MagazineMachineGunMG42 = Короб MG-342
.desc = Короб для MG-342 с длинной лентой .30 винтовочных.
ent-MagazineLightMachineGunMG60 = Короб ПКМ
.desc = Короб для ПКМ с длинной лентой .30 винтовочных.
ent-MagazineVP70 = магазин пистолета VP-78
.desc = Использует патроны калибра .35 мм.
.desc = Использует патроны калибра .35 Авто.
ent-MagazineGlock22 = магазин пистолета Glock-22
.desc = Использует патроны калибра .35 мм.
.desc = Использует патроны калибра .35 Авто.
ent-MagazineHIBrowning = магазин HIBrowning-88 М4
.desc = Использует патроны калибра .35 мм
ent-MagazineACP14 = магазин пистолета ACP-14
.desc = Использует патроны калибра .35 мм
.desc = Использует патроны калибра .35 Авто.
ent-MagazineSTG44 = магазин STG44
.desc = { ent-BaseItem.desc }
ent-MagazinePistolSubMachineGunSIAR52 = Расширенный магазин (безгильзовые)
.desc = { ent-BaseMagazineLightRifle.desc }
ent-MagazineDl6902 = коробка-магазин DL6902
ent-MagazineDl6902 = короб-магазин DL6902
.desc = { ent-BaseMagazineLightRifle.desc }

View file

@ -3,6 +3,6 @@ ent-MagazineMagnumRubber = пистолетный магазин (.45 магну
ent-MagazineMagnumSubMachineGunRubber = магазин Вектора (.45 магнум резиновые)
.desc = { ent-BaseMagazineMagnum.desc }
ent-MagazineDeagle = магазин пустынного орла
.desc = Использует патроны калибра .50 мм.
.desc = Использует патроны калибра .45 магнум.
ent-MagazineDeagleExtended = { ent-MagazineDeagle }
.desc = { ent-MagazineDeagle.desc }

View file

@ -3,14 +3,14 @@ ent-MagazinePistolRubber = пистолетный магазин (.35 авто
ent-MagazinePistolSubMachineGunRubber = магазин ПП (.35 авто резиновые)
.desc = { ent-BaseMagazinePistolSubMachineGun.desc }
ent-MagazineP90 = магазин ПП P-90
.desc = Использует патроны калибра .30 мм.
.desc = Использует патроны калибра .35 авто.
ent-MagazineMP7 = магазин ПП MP7
.desc = Использует патроны калибра .30 мм.
.desc = Использует патроны калибра .35 авто.
ent-MagazineMP5 = магазин ПП MP5
.desc = Использует патроны калибра .30 мм.
ent-MagazinePPSH41 = магазин PPSH-41
.desc = Использует патроны калибра .30 мм.
ent-MagazinePPSH41Extended = расширенный магазин PPSH41
.desc = Использует патроны калибра .35 авто.
ent-MagazinePPSH41 = магазин ППШ
.desc = Использует патроны калибра .35 авто.
ent-MagazinePPSH41Extended = расширенный магазин ППШ
.desc = { ent-MagazinePPSH41.desc }
ent-MagazineMP5Extended = расширенный магазин MP5
.desc = { ent-MagazineMP5.desc }

View file

@ -3,15 +3,15 @@ ent-MagazineRifleRubber = магазин (.20 винтовочные резин
ent-MagazineV31 = магазин для рельсотрона
.desc = Стандартный тяжёлый магазин типа EarthGov.
ent-MagazineFamas = магазин автомата автомата фамаз
.desc = Использует патроны калибра .35 мм.
.desc = Использует патроны калибра .20 винтовочные.
ent-MagazineG36 = магазин автомата G-36
.desc = Использует патроны калибра .35 мм.
.desc = Использует патроны калибра .20 винтовочные.
ent-MagazineM28 = магазин автомата M28
.desc = Использует патроны калибра .35 мм.
.desc = Использует патроны калибра .20 винтовочные.
ent-MagazineAR18 = магазин автомата AR-18
.desc = Использует патроны калибра .35 мм
.desc = Использует патроны калибра .20 винтовочные.
ent-MagazineM16A4 = магазин M16A4
.desc = Использует патроны калибра .35 мм.
.desc = Использует патроны калибра .20 винтовочные.
ent-MagazineV31Extended = расширенный магазин V31
.desc = { ent-MagazineV31.desc }
ent-MagazineFamasExtended = расширенный магазин Famas

View file

@ -1,10 +1,10 @@
ent-MagazineDragunov = магазин винтовки Драгунов
.desc = Использует патроны калибра 7.62 мм.
.desc = Использует патроны калибра .60 крупнокалиберный.
ent-MagazineBR64 = магазин винтовки BR-64
.desc = Использует патроны калибра .45 мм.
.desc = Использует патроны калибра .45 магнум.
ent-MagazineBauer127 = магазин Bauer-127
.desc = Использует патроны калибра .60 мм.
ent-MagazineDragunovExtended = расширенный магазин Dragunov
.desc = Использует патроны калибра .60 крупнокалиберный.
ent-MagazineDragunovExtended = Увеличеный магазин Dragunov
.desc = { ent-MagazineDragunov.desc }
ent-MagazineBR64Extended = расширенный магазин BR64
.desc = { ent-MagazineBR64.desc }

View file

@ -1,8 +1,8 @@
ent-WeaponLightMachineGunMG60 = MG-60
.desc = Универсальный пулемёт MG-60 фирмы Raummetall — стандартное ГПМГ армии EarthGov. Хотя обычно устанавливается на транспортные средства, иногда используется пехотой для блокирования проходов, подавления противников или, в редких случаях, для стрельбы на ходу. Использует патрон калибра .30 мм.
ent-WeaponLightMachineGunRPD = RPD
.desc = Дешёвый и надёжный пулемёт, иногда более известный как 'RPD'. Несмотря на отсутствие точек крепления, кроме подствольного, остаётся популярным продуктом на чёрном рынке благодаря своей низкой стоимости, большой ёмкости и повышенному калибру патронов. Использует патрон калибра .30 мм.
ent-WeaponMachineGunMG42 = MG-42
.desc = Пулемёт ОПЗ периода Второй мировой войны. Разработан фирмой Metall-und Lackwarenfabrik Johannes Großfuß в 1942 году. После войны поставки данного пулемёта возобновили в 2342 году. Использует патрон калибра .30 мм.
ent-WeaponLightMachineGunMG60 = ПKM
.desc = Тяжёлый ручной пулемёт ПKM — надёжный пулемёт Армии СССП. Используется пехотой для блокирования проходов, подавления противников или, в редких случаях, для стрельбы на ходу. Использует патрон калибра .30 винтовочный.
ent-WeaponLightMachineGunRPD = РПД-Ш
.desc = РПД-Ш Где "Ш" означает Штурмовой. Вариация Ручного пулемета СССП для Штурмовых операций в космическом пространстве где приклад будет только мешать. Остаётся популярным продуктом на чёрном рынке благодаря своей низкой стоимости. Использует патрон калибра .30 винтовочный.
ent-WeaponMachineGunMG42 = MG-342
.desc = Пулемёт ОПЗ периода Второй мировой войны. Разработан в 1942 году. После войны поставки данного пулемёта возобновили в 2342 году. Использует патрон калибра .30 винтовочный.
ent-WeaponDL6902 = Пулемёт DL6902
.desc = Тяжёлый пулемёт Cybersun.
.desc = Тяжёлый пулемёт Cybersun. Лучшая версия легендарного пулемета L6 SAW. Использует патрон калибра .30 винтовочный.

View file

@ -2,21 +2,21 @@ ent-WeaponPistolMk58Nonlethal = MK58
.desc = Дешёвый и распространённый пистолет, производимый дочерней компанией Nanotrasen. Использует патроны калибра .35 авто.
.suffix = Пистолет, Не летальный
ent-WeaponPistolN1984Nonlethal = N1984
.desc = Дешёвый и распространённый пистолет, производимый дочерней компанией Nanotrasen. Использует патроны калибра .35 авто.
.desc = Дешёвый и распространённый пистолет, производимый дочерней компанией Nanotrasen. Использует патроны калибра .45 магнум.
.suffix = Пистолет, Не летальный
ent-WeaponPistolVP78 = боевой пистолет VP-78
.desc = VP-78, произведённый компанией Markus Henday Inc. Массивный, грозный автоматический пистолет заряжается патронами калибра .35 мм.
.desc = VP-78, произведённый компанией Markus Henday Inc. Массивный, грозный автоматический пистолет заряжается патронами калибра .35 авто.
ent-WeaponPistolG22 = Glock-22
.desc = Популярное полицейское огнестрельное оружие в наши дни. Использует патрон калибра .35 мм.
.desc = Популярное полицейское огнестрельное оружие в наши дни. Использует патрон калибра .35 авто.
.suffix = Летальный
ent-WeaponPistolG22NonLethal = Glock-22
.suffix = Не летальный
.desc = { ent-BaseWeaponPistol.desc }
ent-WeaponPistolHIB88M4 = HIBrowning-88 М4
.desc = Необычный пистолет, используемый для самообороны, но он часто используется террористическими организациями. Использует патрон калибра .35 мм.
.desc = Необычный пистолет, используемый для самообороны, но он часто используется террористическими организациями. Использует патрон калибра .35 авто.
ent-WeaponPistolACP14 = ACP-14
.desc = ACP-14 производства Earth Armories. Надёжное боковое оружие, заряжается патронами калибра .35 мм.
.desc = ACP-14 производства Earth Armories. Надёжное огнестрельное оружие, заряжается патронами калибра .35 авто.
ent-WeaponRevolverMatebaNew = Матеба
.desc = Культовое оружие. Использует патроны "магнум" 45-го калибра.
ent-WeaponPistolDeagle = пустынный орёл
.desc = "Использует патроны калибра .50 мм, который наносит серьёзный удар. Выгравировано: Мир благодаря превосходящей огневой мощи"".
ent-WeaponPistolDeagle = пустотнный орёл
.desc = "Использует патрон "магнум" 45-го калибра, который наносит серьёзный удар. Выгравировано: Мир благодаря превосходящей огневой мощи".

View file

@ -10,11 +10,11 @@ ent-WeaponRifleFamas = фамас
ent-WeaponRifleG36 = G-36
.desc = Штурмовая винтовка H&K G-36 раньше была стандартной винтовкой армии Земного правительства. Использует патрон калибра .20 винтовочный.
ent-WeaponRifleM28 = M-28
.desc = Штурмовая винтовка М-28 раньше была стандартной винтовкой армии Земного Правительства. Использует патрон калибра .20 винтовочный.
ent-WeaponRifleAR18 = AR-18
.desc = Штурмовая винтовка М-28 раньше была стандартной винтовкой армии Земного Правительства. Использует патрон калибра .20 винтовочный.
ent-WeaponRifleAR18 = Карабин AR-18
.desc = Карабин H&K AR-18 является одной из стандартных винтовок, используемых армией Земного правительства. Он обычно используется людьми, предпочитающими большую мобильность в бою, такими как разведчики и другая лёгкая пехота. Заряжается патронами .20 винтовочный.
ent-WeaponRifleM16A4 = M16A4
.desc = Легкая, универсальная штурмовая винтовка. До сих пор сохраняет актуальность среди наемников и ополченцев. Заряжается патронами калибра .30 винтовочный.
.desc = Легкая, универсальная штурмовая винтовка. До сих пор сохраняет актуальность среди наемников и ополченцев. Заряжается патронами калибра .20 винтовочный.
ent-WeaponSTG44 = STG 44
.desc = { ent-BaseWeaponRifle.desc }
ent-WeaponRifleV31 = Штурмовая винтовка V-31

View file

@ -1,9 +1,9 @@
ent-WeaponXM1014 = XM1014
.desc = Боевое ружье Earth Armories XM1014 - это полуавтоматическое ружье, используемое стрелками в отрядах армии Земли. Использует патроны калибра .50 ружейный.
.desc = Боевой дробовик Earth Armories XM1014 - это полуавтоматический дробовик, используемый стрелками в отрядах армии Земли. Использует патроны калибра .50 ружейный.
ent-WeaponShotgunPaladin12 = дробовик Паладин
.desc = Пятизарядный укороченный помповый дробовик, созданный под нужны сотрудников правоохранительных органов. Использует патроны калибра .50 ружейный.
ent-WeaponShotgunSPAS12 = SPAS-12
.desc = Дробовик морского корпуса EarthGov. Может использовать широкую номенклатуру боеприпасов калибра .50 ружейный.
ent-WeaponShotgunSPAS12 = LAW-12
.desc = Полицейский полуавтоматический Дробовик. Может использовать широкую номенклатуру боеприпасов калибра .50 ружейный.
ent-WeaponShotgunTrenchgun4034 = Trenchgun L-4034
.desc = Дешёвый шестизарядный дробовик. Широко используется для охоты, обороны дома и полицейской службы. Использует патроны калибра .50 ружейный.
ent-WeaponShotgunZauer = Zauer

View file

@ -1,23 +1,23 @@
ent-WeaponSubMachineGunDrozdRubber = Дрозд
.desc = Превосходный, полностью автоматический, тяжёлый пистолет-пулемёт. Использует патроны калибра .35 авто.
.desc = Превосходный, тяжёлый пистолет-пулемёт. Использует патроны калибра .35 авто.
.suffix = ПП, Не летальный
ent-WeaponSubMachineGunVectorRubber = Вектор
.desc = Превосходный тяжёлый пистолет-пулемёт. Использует патроны калибра .45 магнум.
.suffix = Неактуален, Не летальный , используйте Дрозд
ent-WeaponSubMachineGunP90 = P-90
.desc = P-90 - это SMG стандартного выпуска EarthGov. Он известен своими компактными размерами и простотой использования в полевых условиях. Обычно его носят военнослужащие, которым нужно лёгкое огнестрельное оружие для спешки. Использует патрон калибра .30 мм.
.desc = P-90 - это SMG стандартного выпуска EarthGov. Он известен своими компактными размерами и простотой использования в полевых условиях. Использует патрон калибра .35 авто.
ent-WeaponSubMachineGunMP38 = MP-38
.desc = MP-38 - старый и дешёвый пистолет-пулемёт, используемый повстанцами, он обладает хорошими характеристиками на больших дистанциях в компактном корпусе, хотя и страдает из-за низкой для своего класса скорострельности. Использует патрон калибра .30 мм.
.desc = MP-38 - старый и дешёвый пистолет-пулемёт, используемый повстанцами, он не обладает хорошими характеристиками. Использует патрон калибра .35 авто.
ent-WeaponSubMachineGunMP7 = MP7
.desc = Модель SMG7 с архаичным дизайном, насчитывающим сотни лет, была распространена в своё время. Сегодня он находит ограниченное применение в качестве дешёвых компьютерных копий или семейных реликвий, хотя каким-то образом попал в руки колониальных повстанцев. Заряжается патронами калибра .30 мм.
.desc = Модель SMG7 с архаичным дизайном, насчитывающим сотни лет, была распространена в своё время. Использует патрон калибра .35 авто.
ent-WeaponSubMachineGunMP5 = MP5
.desc = Пистолет-пулемёт RivArms SMG-5 - обновление классического дизайна. Лёгкое огнестрельное оружие, способное эффективно использоваться одной рукой, которое идеально подходит для боя на ближней и средней дистанции. Заряжается патронами калибра .30 мм.
.desc = Пистолет-пулемёт RivArms SMG-5 - обновление классического дизайна. Лёгкое огнестрельное оружие, способное эффективно использоваться одной рукой, которое идеально подходит для боя на ближней и средней дистанции. Использует патрон калибра .35 авто.
ent-WeaponSubMachineGunSkorpion = Скорпион VZ-61
.desc = Надёжное огнестрельное оружие 20-го века, представляющее собой комбинацию пистолета и автомата. Использует патрон калибра .30 мм.
.desc = Надёжное огнестрельное оружие, представляющее собой комбинацию пистолета и пистолет-пулемёта. Использует патрон калибра .35 авто.
ent-WeaponSubMachineGunNewVector = Вектор
.desc = Вектор, используемый полицейским спецназом. Заряжается патронами калибра .30 мм.
ent-WeaponSubMachineGunPPSH41 = PPSH-41
.desc = ППШ-41 или /"Папаша"/ - это пистолет-пулемёт USB-модели, который многие террористические организации копировали на протяжении многих лет. Несмотря на малую поражающую способность, его надёжность, исключительная долговечность и высокая огневая мощь оказываются полезными для рук пользователя.
.desc = Вектор, используемый полицейским спецназом. Использует патрон калибра .35 авто.
ent-WeaponSubMachineGunPPSH41 = ППШ-71
.desc = ППШ-71 или /"Папаша"/ - это пистолет-пулемёт СССП. Несмотря на малую поражающую способность, его надёжность, исключительная долговечность и высокая огневая мощь оказываются полезными для рук пользователя.
ent-WeaponSIAR52 = пистолет-пулемёт SIAR-52
.desc = Высокоскорострельный ПП, оборудован интегрированым глушителем.
ent-WeaponAMS-42 = AMS-42

View file

@ -1,7 +1,7 @@
ent-WeaponSniperDragunov = Драгунов
.desc = Полуавтоматическая снайперская винтовка, известная своей меткостью, полностью предназначена для стрельбы на дальние дистанции. Использует патрон калибра 7.62x54 мм.
ent-WeaponRifleBR64 = BR-64
.desc = San Cristo Arms BR-64 - основная боевая винтовка Корпуса морской пехоты. Он известен своей стабильной способностью хорошо работать на большинстве дистанций и убойной силой на близком расстоянии. В основном им пользуются люди, которые предпочитают круглую форму побольше средней. Заряжается патронами калибра .45 мм.
.desc = San Cristo Arms BR-64 - основная боевая винтовка Корпуса морской пехоты. Он известен своей стабильной способностью хорошо работать на большинстве дистанций и убойной силой на близком расстоянии. В основном им пользуются люди, которые предпочитают круглую форму побольше средней. Заряжается патронами калибра 45 Magnum.
ent-WeaponRifleBauer127 = затворная винтовка Bauer SR-127
.desc = Bauer SR-127 - это стандартная винтовка с затвором, используемая Объединённым правительством Земли. Известен своей точностью на дальних дистанциях и используется стрелками, несмотря на свой возраст и отсутствие IFF. У него несъёмный прицел. Использует магазины 60-го калибра, защищающие от материалов.
ent-WeaponSniperGarand = M1 Garand

View file

@ -1,6 +1,6 @@
marking-DemomTail1 = острый конец, хвост
marking-DemomTailLong = длинный и пушистый, хвост
marking-DemomTailUp = длинный и пушистый, хвост (приподнят)
marking-DemonTail1 = острый конец, хвост
marking-DemonTailLong = длинный и пушистый, хвост
marking-DemonTailUp = длинный и пушистый, хвост (приподнят)
marking-DemonCowEars = коровьи ушки, уши
marking-DemonEars = демонические ушки, уши
marking-DemonCowHorns = коровьи рожки, рога

View file

@ -628,25 +628,24 @@ station-goal-medical-replenishment =
Одна из наших колоний слишком сильно пострадала от нападения ксеноморфов. В данный момент колония не может нормально функционировать и
все раненные были перемещены на СЦК, потому медицинскому отделу даётся задача произвести следующий список лекарств:[bold]
1. Сигинат (200 унций).
2. Когнизин (200 унций).
2. Дексалин плюс (200 унций).
3. Инсузин (200 унций).
4. Пиразин (200 унций).
5. Дифенилметиламин (200 унций).
6. Эпинефрин (200 унций).
7. Галоперидол (200 унций).
8. Некрозол (100 унций).
8. Некрозол (200 унций).
9. Целлиминол (200 унций).
10. H-32 (200 унций).
11. Оппорозидон (200 унций).
12. Алоксадон (200 унций).
13. Этилредоксразин (200 унций).
14. Лацеринол (100 унций).
15. Пунтктураз (100 унций).
14. Лацеринол (200 унций).
15. Пунтктураз (200 унций).
16. Бруизин (200 унций).
17. Физраствор (200 унций).
18. Дифенгидрамин (200 унций).
19. Лепоразин (100 унций).
20. Дексалин плюс (200 унций).[/bold]
19. Лепоразин (200 унций).[/bold]
⠀Так же необходимо сделать набор, в который войдёт:[bold]
1. Аптечка первой помощи (5 шт.).

View file

@ -25,6 +25,8 @@ uplink-music-boombox-desc = Содержит бумбокс синдиката
uplink-syndie-nvd-name = ПНВ Синдиката
uplink-syndie-nvd-desc = Качественно исполненый прибор ночного видения, производства компании "Горлакс секьюрити", использует красные линзы для улучшения видимости в условиях низкой освещенности.
uplink-syndie-diagnostic-hud-name = визор МЕХ-пилота синдиката
uplink-syndie-diagnostic-hud-desc = Профессиональный визор анализирующий в реальном времени состояние МЕХа.
uplink-clothing-backpack-syndie-name = Рюкзак Синдиката
uplink-hardsuit-syndie-commander-name = скафандр Командира Синдиката
uplink-hardsuit-syndie-commander-desc = Скафандр предназначеный для командиров отрядов Горлекса.

View file

@ -7,7 +7,7 @@
tags:
- Cartridge
- CartridgeAntiMateriel
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletAntiMateriel
- type: Sprite
sprite: Objects/Weapons/Guns/Ammunition/Casings/large_casing.rsi

View file

@ -8,7 +8,7 @@
tags:
- Cartridge
- CartridgeCaselessRifle
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
deleteOnSpawn: true
- type: Sprite
noRot: false
@ -26,7 +26,7 @@
name: cartridge (.25 caseless)
parent: BaseCartridgeCaselessRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletCaselessRifle
- type: entity
@ -34,7 +34,7 @@
name: cartridge (.25 caseless practice)
parent: BaseCartridgeCaselessRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletCaselessRiflePractice
- type: Sprite
layers:

View file

@ -8,7 +8,7 @@
tags:
- Cartridge
- CartridgeHeavyRifle
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletHeavyRifle
- type: Sprite
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
@ -25,6 +25,6 @@
name: cartridge (.10 rifle)
parent: BaseCartridgeHeavyRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletMinigun
deleteOnSpawn: true

View file

@ -8,7 +8,7 @@
tags:
- Cartridge
- CartridgeLightRifle
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletLightRifle
- type: Sprite
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
@ -23,7 +23,7 @@
name: cartridge (.30 rifle)
parent: BaseCartridgeLightRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletLightRifle
- type: entity
@ -31,7 +31,7 @@
name: cartridge (.30 rifle practice)
parent: BaseCartridgeLightRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletLightRiflePractice
- type: Sprite
layers:
@ -46,7 +46,7 @@
name: cartridge (.30 rifle incendiary)
parent: BaseCartridgeLightRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletLightRifleIncendiary
- type: Sprite
layers:
@ -61,7 +61,7 @@
name: cartridge (.30 rifle uranium)
parent: BaseCartridgeLightRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletLightRifleUranium
- type: Sprite
layers:

View file

@ -8,7 +8,7 @@
tags:
- Cartridge
- CartridgeMagnum
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletMagnum
- type: Sprite
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
@ -23,7 +23,7 @@
name: cartridge (.45 magnum)
parent: BaseCartridgeMagnum
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletMagnum
- type: entity
@ -31,7 +31,7 @@
name: cartridge (.45 magnum practice)
parent: BaseCartridgeMagnum
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletMagnumPractice
- type: Sprite
layers:
@ -46,7 +46,7 @@
name: cartridge (.45 magnum incendiary)
parent: BaseCartridgeMagnum
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletMagnumIncendiary
- type: Sprite
layers:
@ -61,7 +61,7 @@
name: cartridge (.45 magnum armor-piercing)
parent: BaseCartridgeMagnum
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletMagnumAP
- type: Sprite
layers:
@ -76,7 +76,7 @@
name: cartridge (.45 magnum uranium)
parent: BaseCartridgeMagnum
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletMagnumUranium
- type: Sprite
layers:

View file

@ -8,7 +8,7 @@
tags:
- Cartridge
- CartridgePistol
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletPistol
- type: Sprite
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
@ -23,7 +23,7 @@
name: cartridge (.35 auto)
parent: BaseCartridgePistol
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletPistol
- type: entity
@ -31,7 +31,7 @@
name: cartridge (.35 auto practice)
parent: BaseCartridgePistol
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletPistolPractice
- type: Sprite
layers:
@ -46,7 +46,7 @@
name: cartridge (.35 auto incendiary)
parent: BaseCartridgePistol
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletPistolIncendiary
- type: Sprite
layers:

View file

@ -8,7 +8,7 @@
tags:
- Cartridge
- CartridgeRifle
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletRifle
- type: Sprite
sprite: Objects/Weapons/Guns/Ammunition/Casings/ammo_casing.rsi
@ -23,7 +23,7 @@
name: cartridge (.20 rifle)
parent: BaseCartridgeRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletRifle
- type: entity
@ -31,7 +31,7 @@
name: cartridge (.20 rifle practice)
parent: BaseCartridgeRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletRiflePractice
- type: Sprite
layers:
@ -46,7 +46,7 @@
name: cartridge (.20 rifle incendiary)
parent: BaseCartridgeRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletRifleIncendiary
- type: Sprite
layers:
@ -61,7 +61,7 @@
name: cartridge (.20 rifle uranium)
parent: BaseCartridgeRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletRifleUranium
- type: Sprite
layers:

View file

@ -19,10 +19,31 @@
- type: Appearance
- type: SpentAmmoVisuals
- type: entity
id: BaseShellHitscanShotgun
name: shell (.50)
parent: [ BaseCartridge, BaseRestrictedContraband ]
abstract: true
components:
- type: Tag
tags:
- Cartridge
- ShellShotgun
- type: HitScanCartridgeAmmo
soundEject:
collection: ShellEject
- type: Sprite
sprite: Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi
layers:
- state: base
map: [ "enum.AmmoVisualLayers.Base" ]
- type: Appearance
- type: SpentAmmoVisuals
- type: entity
id: ShellShotgunBeanbag
name: shell (.50 beanbag)
parent: BaseShellShotgun
parent: BaseShellHitscanShotgun
components:
- type: Tag
tags:
@ -33,21 +54,24 @@
layers:
- state: beanbag
map: [ "enum.AmmoVisualLayers.Base" ]
- type: CartridgeAmmo
proto: PelletShotgunBeanbagSpread # Sunrise-Edit
- type: HitScanCartridgeAmmo
proto: PelletShotgunBeanbag
- type: HitScanSpread
count: 3
spread: 4.5
- type: SpentAmmoVisuals
state: "beanbag"
- type: entity
id: ShellShotgunSlug
name: shell (.50 slug)
parent: BaseShellShotgun
parent: BaseShellHitscanShotgun
components:
- type: Sprite
layers:
- state: slug
map: [ "enum.AmmoVisualLayers.Base" ]
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: PelletShotgunSlug
- type: SpentAmmoVisuals
state: "slug"
@ -74,47 +98,56 @@
- type: entity
id: ShellShotgun
name: shell (.50)
parent: BaseShellShotgun
parent: BaseShellHitscanShotgun
components:
- type: Sprite
layers:
- state: base
map: [ "enum.AmmoVisualLayers.Base" ]
- type: CartridgeAmmo
proto: PelletShotgunSpread
- type: HitScanCartridgeAmmo
proto: PelletShotgun
- type: HitScanSpread
count: 6
spread: 15
- type: entity
id: ShellShotgunIncendiary
name: shell (.50 incendiary)
parent: BaseShellShotgun
parent: BaseShellHitscanShotgun
components:
- type: Sprite
layers:
- state: incendiary
map: [ "enum.AmmoVisualLayers.Base" ]
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: PelletShotgunIncendiarySpread
- type: HitScanSpread
count: 6
spread: 15
- type: SpentAmmoVisuals
state: "incendiary"
- type: entity
id: ShellShotgunPractice
name: shell (.50 practice)
parent: BaseShellShotgun
parent: BaseShellHitscanShotgun
components:
- type: Sprite
layers:
- state: practice
map: [ "enum.AmmoVisualLayers.Base" ]
- type: CartridgeAmmo
proto: PelletShotgunPracticeSpread
- type: HitScanCartridgeAmmo
proto: PelletShotgunPractice
- type: HitScanSpread
count: 6
spread: 15
- type: SpentAmmoVisuals
state: "practice"
- type: entity
id: ShellTranquilizer
name: shell (.50 tranquilizer)
parent: BaseShellShotgun
parent: BaseShellHitscanShotgun
components:
- type: Tag
tags:
@ -125,17 +158,17 @@
layers:
- state: tranquilizer
map: [ "enum.AmmoVisualLayers.Base" ]
- type: CartridgeAmmo
proto: PelletShotgunTranquilizer
- type: ChemicalAmmo
- type: HitScanCartridgeAmmo
proto: PelletShotgunPractice
- type: SolutionContainerManager
solutions:
ammo:
reagents:
- ReagentId: ChloralHydrate
Quantity: 7
- type: SolutionTransfer
maxTransferAmount: 7
Quantity: 15
- type: SolutionInjectOnProjectileHit
transferAmount: 15
solution: ammo
- type: SpentAmmoVisuals
state: "tranquilizer"
@ -143,7 +176,7 @@
id: ShellShotgunImprovised
name: improvised shotgun shell
description: A homemade shotgun shell that shoots painful glass shrapnel. The spread is so wide that it couldn't hit the broad side of a barn.
parent: BaseShellShotgun
parent: BaseShellHitscanShotgun
components:
- type: Tag
tags:
@ -157,21 +190,27 @@
- type: Construction
graph: ImprovisedShotgunShellGraph
node: shell
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: PelletShotgunImprovisedSpread
- type: HitScanSpread
count: 10
spread: 45
- type: SpentAmmoVisuals
state: "improvised"
- type: entity
id: ShellShotgunUranium
name: uranium shotgun shell
parent: BaseShellShotgun
parent: BaseShellHitscanShotgun
components:
- type: Sprite
layers:
- state: depleted-uranium
map: [ "enum.AmmoVisualLayers.Base" ]
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: PelletShotgunUraniumSpread
- type: HitScanSpread
count: 5
spread: 6
- type: SpentAmmoVisuals
state: "depleted-uranium"

View file

@ -30,17 +30,6 @@
- type: StaminaDamageOnCollide
damage: 15 # 3 hits to stun # Sunrise-Edit
- type: entity # Sunrise-Edit
id: PelletShotgunBeanbagSpread
categories: [ HideSpawnMenu ]
parent: PelletShotgunBeanbag
components:
- type: ProjectileSpread
proto: PelletShotgunBeanbag
count: 3
spread: 4.5
- type: entity
id: PelletShotgun
name: pellet (.50)

View file

@ -115,7 +115,7 @@
- type: ContainerContainer
containers:
ballistic-ammo: !type:Container
- type: ProjectileBatteryAmmoProvider
- type: HitscanBatteryAmmoProvider
proto: CartridgeLightRifle
fireCost: 100
- type: Battery

View file

@ -125,7 +125,7 @@
- type: ContainerContainer
containers:
ballistic-ammo: !type:Container
- type: ProjectileBatteryAmmoProvider
- type: HitscanBatteryAmmoProvider
proto: BulletPistol
fireCost: 100
- type: Battery

View file

@ -83,29 +83,23 @@
amount: 1
- type: entity
id: GunSafeSubMachineGunMP38
id: GunSafeEnergyGunPistolSecurity
parent: GunSafe
name: safe
suffix: MP-38
suffix: Energy Pistol «Judge»
components:
- type: StorageFill
contents:
- id: WeaponSubMachineGunMP38
amount: 2
- id: BoxLethalshot
amount: 2
- id: BoxShotgunIncendiary
amount: 1
- id: BoxShotgunSlug
amount: 1
- id: WeaponEnergyGunPistolSecurity
amount: 4
- type: entity
parent: GunSafe
id: GunSafeEnergyGun
name: safe
suffix: Energy guns
suffix: Tactical Energy guns
components:
- type: StorageFill
contents:
- id: WeaponEnergyGun
- id: WeaponEnergyGunTactical
amount: 3

View file

@ -12,6 +12,25 @@
categories:
- UplinkWearables
- type: listing
id: UplinkClothingEyesHudSyndicateMech
name: uplink-syndie-diagnostic-hud-name
description: uplink-syndie-diagnostic-hud-desc
icon: { sprite: /Textures/_Sunrise/Clothing/Eyes/Hud/syndmech.rsi, state: icon }
productEntity: ClothingEyesHudSyndicateMech
discountCategory: rareDiscounts
discountDownTo:
Telecrystal: 2
cost:
Telecrystal: 3
categories:
- UplinkWearables
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink
# For the Buldog
- type: listing
id: UplinkMagazineShotgun

View file

@ -12,3 +12,20 @@
- type: Tag
tags:
- HudMedical
- type: entity
parent: [ClothingEyesBase, ShowSecurityIcons, BaseSyndicateContraband]
id: ClothingEyesHudSyndicateMech
name: syndicate Mech pilot visor
description: The syndicate Mech pilote`s professional head-up display, designed for quick diagnosis of their Mech's status.
components:
- type: Sprite
sprite: _Sunrise/Clothing/Eyes/Hud/syndmech.rsi
- type: Clothing
sprite: _Sunrise/Clothing/Eyes/Hud/syndmech.rsi
- type: ShowSyndicateIcons
- type: ShowHealthBars
damageContainers:
- Inorganic
- Silicon
- Mech # Sunrise-edit

View file

@ -1,5 +1,5 @@
- type: marking
id: DemomTail1
id: DemonTail1
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Demon]
@ -8,7 +8,7 @@
state: demon_tail
- type: marking
id: DemomTailLong
id: DemonTailLong
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Demon]
@ -17,7 +17,7 @@
state: long
- type: marking
id: DemomTailUp
id: DemonTailUp
bodyPart: Tail
markingCategory: Tail
speciesRestriction: [Demon]

View file

@ -5,6 +5,7 @@
id: BaseMobDemon
abstract: true
components:
- type: Absorbable
- type: HumanoidAppearance
species: Demon
- type: Hunger

View file

@ -25,6 +25,17 @@
- Scream
- Whines
- type: FootprintEmitter
- type: MeleeWeapon
hidden: true
soundHit:
collection: Punch
angle: 30
animation: WeaponArcClaw
attackRate: 1
damage:
types:
Blunt: 2
Slash: 3
- type: entity

View file

@ -235,7 +235,7 @@
- type: ItemBorgModule
items:
- EnergyDaggerLoud
- LightMachineGunBorg
- WeaponLightMachineGunL6C
- type: entity
id: BorgModuleStandart

View file

@ -259,47 +259,6 @@
startingItem: PowerCellRobotTool
locked: true
- type: entity
name: machine gun borg
id: LightMachineGunBorg
parent: BaseItem
categories: [ HideSpawnMenu ]
description:
components:
- type: Sprite
sprite: Objects/Weapons/Guns/LMGs/l6.rsi
layers:
- state: icon
map: ["enum.GunVisualLayers.Base"]
- type: Item
sprite: Objects/Weapons/Guns/LMGs/l6.rsi
- type: Gun
minAngle: 4
maxAngle: 20
angleIncrease: 4
angleDecay: 16
fireRate: 8
selectedMode: FullAuto
availableModes:
- FullAuto
soundGunshot:
collection: m249
params:
volume: 10
soundEmpty:
path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg
- type: Appearance
- type: ProjectileBatteryAmmoProvider
proto: BulletLightRifle
fireCost: 100
- type: Battery
maxCharge: 10000
startingCharge: 10000
- type: BatterySelfRecharger
autoRecharge: true
autoRechargeRate: 25
- type: AmmoCounter
- type: entity
name: robot china lake
parent: WeaponLauncherChinaLake
@ -552,7 +511,7 @@
volume: 10
soundEmpty:
path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg
- type: ProjectileBatteryAmmoProvider
- type: HitscanBatteryAmmoProvider
proto: CartridgeLightRifle
fireCost: 50
- type: Battery
@ -591,7 +550,7 @@
- FullAuto
soundEmpty:
path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg
- type: ProjectileBatteryAmmoProvider
- type: HitscanBatteryAmmoProvider
proto: CartridgeCaselessRifle
fireCost: 50
- type: Battery

View file

@ -3,7 +3,7 @@
name: cartridge (.25 caseless rubber)
parent: BaseCartridgeCaselessRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletCaselessRifleRubber
- type: Sprite
layers:
@ -11,4 +11,4 @@
map: [ "enum.AmmoVisualLayers.Base" ]
- state: tip
map: [ "enum.AmmoVisualLayers.Tip" ]
color: "#43c4f7"
color: "#43c4f7"

View file

@ -3,7 +3,7 @@
name: cartridge (.30 rifle rubber)
parent: BaseCartridgeLightRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletLightRifleRubber
- type: Sprite
layers:
@ -11,4 +11,4 @@
map: [ "enum.AmmoVisualLayers.Base" ]
- state: tip
map: [ "enum.AmmoVisualLayers.Tip" ]
color: "#43c4f7"
color: "#43c4f7"

View file

@ -3,7 +3,7 @@
name: cartridge (.45 magnum rubber)
parent: BaseCartridgeMagnum
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletMagnumRubber
- type: Sprite
layers:
@ -11,4 +11,4 @@
map: [ "enum.AmmoVisualLayers.Base" ]
- state: tip
map: [ "enum.AmmoVisualLayers.Tip" ]
color: "#43c4f7"
color: "#43c4f7"

View file

@ -3,7 +3,7 @@
name: cartridge (.35 auto rubber)
parent: BaseCartridgePistol
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletPistolRubber
- type: Sprite
layers:
@ -11,4 +11,4 @@
map: [ "enum.AmmoVisualLayers.Base" ]
- state: tip
map: [ "enum.AmmoVisualLayers.Tip" ]
color: "#43c4f7"
color: "#43c4f7"

View file

@ -3,7 +3,7 @@
name: cartridge (.20 rifle rubber)
parent: BaseCartridgeRifle
components:
- type: CartridgeAmmo
- type: HitScanCartridgeAmmo
proto: BulletRifleRubber
- type: Sprite
layers:

View file

@ -0,0 +1,377 @@
- type: entity
id: HitscanEffectTracer
categories: [ HideSpawnMenu ]
components:
- type: TimedDespawn
lifetime: 0.05
- type: Sprite
drawdepth: Effects
layers:
- shader: unshaded
map: ["enum.EffectLayers.Unshaded"]
- type: EffectVisuals
- type: Tag
tags:
- HideContextMenu
- type: AnimationPlayer
# hitscan bullet
- type: hitscan
id: BulletPistol
damage:
types:
Piercing: 16
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletPistolRubber
damage:
types:
Blunt: 1
staminaDamage: 20
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletPistolPractice
damage:
types:
Blunt: 2
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletPistolIncendiary
damage:
types:
Blunt: 2
Heat: 14
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletPistolUranium
damage:
types:
Radiation: 6
Piercing: 10
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletRifle
damage:
types:
Piercing: 17
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletRifleRubber
damage:
types:
Blunt: 1
staminaDamage: 20
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletRiflePractice
damage:
types:
Blunt: 2
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletRifleIncendiary
damage:
types:
Blunt: 2
Heat: 15
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletRifleUranium
damage:
types:
Radiation: 7
Piercing: 8
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletMagnum
damage:
types:
Blunt: 35
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletMagnumRubber
damage:
types:
Blunt: 1
staminaDamage: 20
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletMagnumPractice
damage:
types:
Blunt: 1
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletMagnumIncendiary
damage:
types:
Blunt: 3
Heat: 32
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletMagnumAP
damage:
types:
Piercing: 26
ignoreResistances: true
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletMagnumUranium
damage:
types:
Radiation: 15
Piercing: 20
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletLightRifle
damage:
types:
Piercing: 19
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletLightRifleRubber
damage:
types:
Blunt: 1
staminaDamage: 20
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletLightRiflePractice
damage:
types:
Blunt: 2
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletLightRifleIncendiary
damage:
types:
Blunt: 3
Heat: 16
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletLightRifleUranium
damage:
types:
Radiation: 9
Piercing: 10
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletHeavyRifle
damage:
types:
Piercing: 19
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletMinigun
damage:
types:
Piercing: 5
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletCaselessRifle
damage:
types:
Piercing: 19
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletCaselessRifleRubber
damage:
types:
Blunt: 1
staminaDamage: 20
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletCaselessRiflePractice
damage:
types:
Blunt: 2
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: BulletAntiMateriel
damage:
types:
Piercing: 40
Structural: 30
staminaDamage: 35
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: PelletShotgunPractice
damage:
types:
Blunt: 1
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: PelletShotgunBeanbag
damage:
types:
Blunt: 2.5
staminaDamage: 15
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: PelletShotgunSlug
damage:
types:
Piercing: 28
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: PelletShotgun
damage:
types:
Piercing: 10
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: PelletShotgunIncendiary
damage:
types:
Blunt: 3
Heat: 7
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: PelletShotgunImprovised
damage:
types:
Piercing: 3
Slash: 3
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet
- type: hitscan
id: PelletShotgunUranium
damage:
types:
Radiation: 5
Piercing: 5
collisionMask: BulletImpassable
bulletTracer:
sprite: _Sunrise/Objects/Weapons/Guns/Projectiles/hitscan_tracer.rsi
state: bullet

View file

@ -50,6 +50,7 @@
id: NanoTrasenRepresentativePDA
ears: ClothingHeadsetAltCommand
pocket1: FlippoEngravedLighter
pocket2: PenCentcom
storage:
back:
- RubberStampNtrep

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

View file

@ -0,0 +1,26 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Sprited by discord:@mishutka09 Resprited by KaiserMaus",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-EYES",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

View file

@ -0,0 +1,24 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "bullet_tracer",
"delays": [
[
0.0333333333333,
0.0333333333333,
0.0333333333333
]
]
},
{
"name": "bullet"
}
]
}