Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
bfd528aecb
64 changed files with 1058 additions and 354 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
14
Content.Shared/Projectiles/HitScanSpreadComponent.cs
Normal file
14
Content.Shared/Projectiles/HitScanSpreadComponent.cs
Normal 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;
|
||||
}
|
||||
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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!;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 шт.).
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -1,2 +1,5 @@
|
|||
ent-ClothingEyesUniversalMedicalHud = универсальный медицинский визор
|
||||
.desc = Дисплей, сочетающий в себе преимущества медицинского сканера и очков для химического анализа.
|
||||
|
||||
ent-ClothingEyesHudSyndicateMech = визор МЕХ-пилота синдиката
|
||||
.desc = Профессиональный визор анализирующий в реальном времени состояние МЕХа.
|
||||
|
|
|
|||
|
|
@ -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 = огнетушитель киборга
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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 винтовочный.
|
||||
|
|
|
|||
|
|
@ -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-го калибра, который наносит серьёзный удар. Выгравировано: Мир благодаря превосходящей огневой мощи".
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
marking-DemomTail1 = острый конец, хвост
|
||||
marking-DemomTailLong = длинный и пушистый, хвост
|
||||
marking-DemomTailUp = длинный и пушистый, хвост (приподнят)
|
||||
marking-DemonTail1 = острый конец, хвост
|
||||
marking-DemonTailLong = длинный и пушистый, хвост
|
||||
marking-DemonTailUp = длинный и пушистый, хвост (приподнят)
|
||||
marking-DemonCowEars = коровьи ушки, уши
|
||||
marking-DemonEars = демонические ушки, уши
|
||||
marking-DemonCowHorns = коровьи рожки, рога
|
||||
|
|
|
|||
|
|
@ -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 шт.).
|
||||
|
|
|
|||
|
|
@ -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 = Скафандр предназначеный для командиров отрядов Горлекса.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
tags:
|
||||
- Cartridge
|
||||
- CartridgeAntiMateriel
|
||||
- type: CartridgeAmmo
|
||||
- type: HitScanCartridgeAmmo
|
||||
proto: BulletAntiMateriel
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Ammunition/Casings/large_casing.rsi
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@
|
|||
- type: ContainerContainer
|
||||
containers:
|
||||
ballistic-ammo: !type:Container
|
||||
- type: ProjectileBatteryAmmoProvider
|
||||
- type: HitscanBatteryAmmoProvider
|
||||
proto: CartridgeLightRifle
|
||||
fireCost: 100
|
||||
- type: Battery
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@
|
|||
- type: ContainerContainer
|
||||
containers:
|
||||
ballistic-ammo: !type:Container
|
||||
- type: ProjectileBatteryAmmoProvider
|
||||
- type: HitscanBatteryAmmoProvider
|
||||
proto: BulletPistol
|
||||
fireCost: 100
|
||||
- type: Battery
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
id: BaseMobDemon
|
||||
abstract: true
|
||||
components:
|
||||
- type: Absorbable
|
||||
- type: HumanoidAppearance
|
||||
species: Demon
|
||||
- type: Hunger
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@
|
|||
- type: ItemBorgModule
|
||||
items:
|
||||
- EnergyDaggerLoud
|
||||
- LightMachineGunBorg
|
||||
- WeaponLightMachineGunL6C
|
||||
|
||||
- type: entity
|
||||
id: BorgModuleStandart
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
name: cartridge (.20 rifle rubber)
|
||||
parent: BaseCartridgeRifle
|
||||
components:
|
||||
- type: CartridgeAmmo
|
||||
- type: HitScanCartridgeAmmo
|
||||
proto: BulletRifleRubber
|
||||
- type: Sprite
|
||||
layers:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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 |
|
|
@ -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 |
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue