[Tweak] The Gunnening (#285)

* wrapped examine (pretty)

* so mentally done

* remove ammo counters

* fix

* the soundening

* less visual recoil

* rifle fixes

* the soundening 2

* i loved # WWDP too much

* review fixes

* fix mag visuals

* top round examine

---------

Co-authored-by: vanx <discord@vanxxxx>
Co-authored-by: Spatison <137375981+Spatison@users.noreply.github.com>
This commit is contained in:
vanx
2025-03-08 11:35:03 +03:00
committed by GitHub
parent d9bf6d88d9
commit cce56e56ce
69 changed files with 560 additions and 35 deletions

View File

@@ -49,4 +49,36 @@ public sealed partial class GunSystem
var cycledEvent = new GunCycledEvent();
RaiseLocalEvent(uid, ref cycledEvent);
}
// WWDP extract round
protected override void Extract(EntityUid uid, MapCoordinates coordinates, BallisticAmmoProviderComponent component,
EntityUid user)
{
if (!Timing.IsFirstTimePredicted)
return;
EntityUid entity;
if (component.Entities.Count > 0)
{
entity = component.Entities[^1];
component.Entities.RemoveAt(component.Entities.Count - 1);
EnsureShootable(entity);
}
else if (component.UnspawnedCount > 0)
{
component.UnspawnedCount--;
entity = Spawn(component.Proto, coordinates);
EnsureShootable(entity);
}
else
{
Popup(Loc.GetString("gun-ballistic-empty"), uid, user);
return;
}
if (IsClientSide(entity))
Del(entity);
}
// WWDP end
}

View File

@@ -1,4 +1,5 @@
using Content.Server.Stack;
using Content.Shared.Hands.EntitySystems; // WWDP
using Content.Shared.Stacks;
using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Events;
@@ -9,6 +10,7 @@ namespace Content.Server.Weapons.Ranged.Systems;
public sealed partial class GunSystem
{
[Dependency] private readonly StackSystem _stack = default!; // WD EDIT
[Dependency] private readonly SharedHandsSystem _handsSystem = default!; // WWDP
protected override void Cycle(EntityUid uid, BallisticAmmoProviderComponent component, MapCoordinates coordinates)
{
@@ -37,6 +39,34 @@ public sealed partial class GunSystem
RaiseLocalEvent(uid, ref cycledEvent);
}
// WWDP extract round
protected override void Extract(EntityUid uid, MapCoordinates coordinates, BallisticAmmoProviderComponent component,
EntityUid user)
{
EntityUid entity;
if (component.Entities.Count > 0)
{
entity = component.Entities[^1];
component.Entities.RemoveAt(component.Entities.Count - 1);
EnsureShootable(entity);
}
else if (component.UnspawnedCount > 0)
{
component.UnspawnedCount--;
entity = Spawn(component.Proto, coordinates);
EnsureShootable(entity);
}
else
{
Popup(Loc.GetString("gun-ballistic-empty"), uid, user);
return;
}
_handsSystem.PickupOrDrop(user, entity);
}
// WWDP extract round end
// WD EDIT START
protected override EntityUid GetStackEntity(EntityUid uid, StackComponent stack)
{

View File

@@ -30,7 +30,7 @@ public sealed partial class CCVars
/// Goes from 0 (no recoil at all) to 1 (regular amounts of recoil)
/// </summary>
public static readonly CVarDef<float> ScreenShakeIntensity =
CVarDef.Create("accessibility.screen_shake_intensity", 1f, CVar.CLIENTONLY | CVar.ARCHIVE);
CVarDef.Create("accessibility.screen_shake_intensity", 0.2f, CVar.CLIENTONLY | CVar.ARCHIVE); // WWDP less visual recoil
/// <summary>
/// A generic toggle for various visual effects that are color sensitive.

View File

@@ -267,7 +267,12 @@ namespace Content.Shared.Examine
//Add an entity description if one is declared
if (!string.IsNullOrEmpty(EntityManager.GetComponent<MetaDataComponent>(entity).EntityDescription))
{
message.AddText(EntityManager.GetComponent<MetaDataComponent>(entity).EntityDescription);
// WWDP edit
var description = EntityManager.GetComponent<MetaDataComponent>(entity).EntityDescription;
var descriptionWrapped = Loc.GetString("examine-entity-description-wrapper", ("description", description));
message.AddMarkup(descriptionWrapped);
// WWDP edit end
hasDescription = true;
}

View File

@@ -34,6 +34,13 @@
return 0;
}
// WWDP edit; fix partially filled mags
if (levels == 2)
{
return 1;
}
// WWDP edit end
var toOne = actual / max;
return (int) Math.Ceiling(toOne * (levels - 2));
}

View File

@@ -31,6 +31,8 @@ public sealed partial class BallisticAmmoProviderComponent : Component
public Container Container = default!;
public bool Racked = true; // WWDP
// TODO: Make this use stacks when the typeserializer is done.
[DataField, AutoNetworkedField]
public List<EntityUid> Entities = new();

View File

@@ -20,6 +20,12 @@ public sealed partial class ChamberMagazineAmmoProviderComponent : MagazineAmmoP
[ViewVariables(VVAccess.ReadWrite), DataField("autoCycle"), AutoNetworkedField]
public bool AutoCycle = true;
/// <summary>
/// WWDP - If true, the gun will lock the bolt open once the mag is empty.
/// </summary>
[ViewVariables(VVAccess.ReadWrite), DataField("boltCatch"), AutoNetworkedField]
public bool BoltCatch = true;
/// <summary>
/// Can the gun be racked, which opens and then instantly closes the bolt to cycle a round.
/// </summary>

View File

@@ -1,5 +1,6 @@
using Content.Shared.DoAfter;
using Content.Shared.Examine;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction;
using Content.Shared.Interaction.Events;
using Content.Shared.Stacks;
@@ -8,6 +9,7 @@ using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Events;
using Robust.Shared.Containers;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared.Weapons.Ranged.Systems;
@@ -15,6 +17,8 @@ namespace Content.Shared.Weapons.Ranged.Systems;
public abstract partial class SharedGunSystem
{
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly IPrototypeManager _proto = default!; // WWDP
[Dependency] private readonly SharedHandsSystem _handsSystem = default!; // WWDP
protected virtual void InitializeBallistic()
@@ -27,7 +31,8 @@ public abstract partial class SharedGunSystem
SubscribeLocalEvent<BallisticAmmoProviderComponent, GetAmmoCountEvent>(OnBallisticAmmoCount);
SubscribeLocalEvent<BallisticAmmoProviderComponent, ExaminedEvent>(OnBallisticExamine);
SubscribeLocalEvent<BallisticAmmoProviderComponent, GetVerbsEvent<Verb>>(OnBallisticVerb);
SubscribeLocalEvent<BallisticAmmoProviderComponent, GetVerbsEvent<InteractionVerb>>(AddInteractionVerb); // WWDP
SubscribeLocalEvent<BallisticAmmoProviderComponent, GetVerbsEvent<AlternativeVerb>>(AddAlternativeVerb); // WWDP
SubscribeLocalEvent<BallisticAmmoProviderComponent, InteractUsingEvent>(OnBallisticInteractUsing);
SubscribeLocalEvent<BallisticAmmoProviderComponent, AfterInteractEvent>(OnBallisticAfterInteract);
SubscribeLocalEvent<BallisticAmmoProviderComponent, AmmoFillDoAfterEvent>(OnBallisticAmmoFillDoAfter);
@@ -50,9 +55,16 @@ public abstract partial class SharedGunSystem
if (_whitelistSystem.IsWhitelistFailOrNull(component.Whitelist, args.Used))
return;
// WWDP EDIT
if (HasComp<BallisticAmmoProviderComponent>(args.Used)) // Ammo providers use the doafter
return;
if (GetBallisticShots(component) >= component.Capacity)
{
Popup(Loc.GetString("gun-ballistic-full"), uid, args.User);
return;
}
// WWDP EDIT END
// WD EDIT START
var entity = args.Used;
@@ -100,6 +112,9 @@ public abstract partial class SharedGunSystem
private void OnBallisticAmmoFillDoAfter(EntityUid uid, BallisticAmmoProviderComponent component, AmmoFillDoAfterEvent args)
{
if (args.Handled || args.Cancelled) // WWDP
return;
if (Deleted(args.Target) ||
!TryComp<BallisticAmmoProviderComponent>(args.Target, out var target) ||
target.Whitelist == null)
@@ -168,14 +183,14 @@ public abstract partial class SharedGunSystem
args.Repeat = moreSpace && moreAmmo;
}
private void OnBallisticVerb(EntityUid uid, BallisticAmmoProviderComponent component, GetVerbsEvent<Verb> args)
private void AddInteractionVerb(EntityUid uid, BallisticAmmoProviderComponent component, GetVerbsEvent<InteractionVerb> args) // WWDP
{
if (!args.CanAccess || !args.CanInteract || args.Hands == null || !component.Cycleable)
if (!args.CanAccess || !args.CanInteract || args.Hands == null) // WWDP
return;
if (component.Cycleable)
{
args.Verbs.Add(new Verb()
args.Verbs.Add(new InteractionVerb() // WWDP
{
Text = Loc.GetString("gun-ballistic-cycle"),
Disabled = GetBallisticShots(component) == 0,
@@ -185,14 +200,97 @@ public abstract partial class SharedGunSystem
}
}
// WWDP edit alt-verb to extract ammunition
private void AddAlternativeVerb(EntityUid uid, BallisticAmmoProviderComponent component, GetVerbsEvent<AlternativeVerb> args)
{
if (!args.CanAccess || !args.CanInteract || args.Hands == null)
return;
args.Verbs.Add(new AlternativeVerb()
{
Text = Loc.GetString("gun-ballistic-extract"),
Disabled = GetBallisticShots(component) == 0,
Act = () => ExtractAction(uid, Transform(uid).MapPosition, component, args.User),
});
}
// WWDP edit end
private void OnBallisticExamine(EntityUid uid, BallisticAmmoProviderComponent component, ExaminedEvent args)
{
if (!args.IsInDetailsRange)
return;
args.PushMarkup(Loc.GetString("gun-magazine-examine", ("color", AmmoExamineColor), ("count", GetBallisticShots(component))));
// WWDP edit; better examine, no ammo count on guns
if (!HasComp<GunComponent>(uid)) // Magazines & Ammo boxes
{
args.PushMarkup(Loc.GetString("gun-ammocount-examine", ("color", AmmoExamineColor), ("count", GetBallisticShots(component))));
// Show top round
if (component.Entities.Count > 0)
{
var round = Name(component.Entities[-1]);
args.PushMarkup(
Loc.GetString("ammo-top-round-examine", ("color", ModeExamineColor), ("round", round)));
}
else if (component.UnspawnedCount > 0)
{
if (!_proto.TryIndex(component.Proto, out var round))
return;
args.PushMarkup(
Loc.GetString("ammo-top-round-examine", ("color", ModeExamineColor), ("round", round.Name)));
}
return;
}
if (component.Entities.Count > 0 && TryComp<MetaDataComponent>(component.Entities[^1], out var cartridgeMetaData))
{
args.PushMarkup(Loc.GetString("gun-chamber-examine", ("color", ModeExamineColor),
("cartridge", cartridgeMetaData.EntityName)), -1);
}
else if (component.UnspawnedCount > 0 && component.Proto != null)
{
var cartridge = _proto.Index<EntityPrototype>(component.Proto);
args.PushMarkup(Loc.GetString("gun-chamber-examine", ("color", ModeExamineColor),
("cartridge", cartridge.Name)), -1);
}
else
{
args.PushMarkup(Loc.GetString("gun-chamber-examine-empty", ("color", ModeExamineBadColor)), -1);
}
if (!component.AutoCycle)
{
if (component.Racked)
{
args.PushMarkup(Loc.GetString("gun-racked-examine", ("color", ModeExamineColor)), -1);
}
else
{
args.PushMarkup(Loc.GetString("gun-racked-examine-not", ("color", ModeExamineBadColor)), -1);
}
}
// WWDP edit end
}
// WWDP manual ammo extraction
private void ExtractAction(EntityUid uid, MapCoordinates coordinates, BallisticAmmoProviderComponent component, EntityUid user)
{
Extract(uid, coordinates, component, user);
Audio.PlayPredicted(component.SoundInsert, uid, user);
UpdateBallisticAppearance(uid, component);
UpdateAmmoCount(uid);
}
// WWDP edit end
protected abstract void Extract(EntityUid uid, MapCoordinates coordinates, BallisticAmmoProviderComponent component,
EntityUid user); // WWDP
private void ManualCycle(EntityUid uid, BallisticAmmoProviderComponent component, MapCoordinates coordinates, EntityUid? user = null, GunComponent? gunComp = null)
{
if (!component.Cycleable)
@@ -214,6 +312,8 @@ public abstract partial class SharedGunSystem
var text = Loc.GetString(shots == 0 ? "gun-ballistic-cycled-empty" : "gun-ballistic-cycled");
component.Racked = true; // WWDP
Popup(text, uid, user);
UpdateBallisticAppearance(uid, component);
UpdateAmmoCount(uid);
@@ -263,8 +363,19 @@ public abstract partial class SharedGunSystem
component.Entities.RemoveAt(component.Entities.Count - 1);
Containers.Remove(entity, component.Container);
}
else
// WWDP edit; support internal caseless ammo in hand-cycled guns
else if (TryComp<CartridgeAmmoComponent>(entity, out var cartridge) && cartridge.DeleteOnSpawn)
{
component.Entities.RemoveAt(component.Entities.Count - 1);
Containers.Remove(entity, component.Container);
component.Racked = false;
break;
} // WWDP edit end
else
{
component.Racked = false; // WWDP
break;
}
}
else if (component.UnspawnedCount > 0)
{
@@ -273,10 +384,14 @@ public abstract partial class SharedGunSystem
args.Ammo.Add((entity, EnsureShootable(entity)));
// WD EDIT START
if (!component.AutoCycle && HasComp<CartridgeAmmoComponent>(entity))
if (!component.AutoCycle && TryComp<CartridgeAmmoComponent>(entity, out var cartridge))
{
component.Entities.Add(entity);
Containers.Insert(entity, component.Container);
component.Racked = false;
if (!cartridge.DeleteOnSpawn)
{
component.Entities.Add(entity);
Containers.Insert(entity, component.Container);
}
break;
}
// WD EDIT END

View File

@@ -27,7 +27,7 @@ public abstract partial class SharedGunSystem
SubscribeLocalEvent<ChamberMagazineAmmoProviderComponent, GetVerbsEvent<ActivationVerb>>(OnChamberActivationVerb);
SubscribeLocalEvent<ChamberMagazineAmmoProviderComponent, GetVerbsEvent<InteractionVerb>>(OnChamberInteractionVerb);
SubscribeLocalEvent<ChamberMagazineAmmoProviderComponent, GetVerbsEvent<AlternativeVerb>>(OnMagazineVerb);
// SubscribeLocalEvent<ChamberMagazineAmmoProviderComponent, GetVerbsEvent<AlternativeVerb>>(OnMagazineVerb); // WWDP no duplicate verbs
SubscribeLocalEvent<ChamberMagazineAmmoProviderComponent, ActivateInWorldEvent>(OnChamberActivate);
SubscribeLocalEvent<ChamberMagazineAmmoProviderComponent, UseInHandEvent>(OnChamberUse);
@@ -276,7 +276,6 @@ public abstract partial class SharedGunSystem
if (!args.IsInDetailsRange)
return;
var (count, _) = GetChamberMagazineCountCapacity(uid, component);
string boltState;
using (args.PushGroup(nameof(ChamberMagazineAmmoProviderComponent)))
@@ -288,10 +287,28 @@ public abstract partial class SharedGunSystem
else
boltState = Loc.GetString("gun-chamber-bolt-closed-state");
args.PushMarkup(Loc.GetString("gun-chamber-bolt", ("bolt", boltState),
("color", component.BoltClosed.Value ? Color.FromHex("#94e1f2") : Color.FromHex("#f29d94"))));
("color", component.BoltClosed.Value ? ModeExamineColor : ModeExamineBadColor))); // WWDP
}
args.PushMarkup(Loc.GetString("gun-magazine-examine", ("color", AmmoExamineColor), ("count", count)));
// WWDP examine: show bolt state, chamber & magazine
var cartridge = _slots.GetItemOrNull(uid, "gun_chamber");
var magazine = _slots.GetItemOrNull(uid, "gun_magazine");
if (cartridge != null && TryComp<MetaDataComponent>(cartridge, out var cartridgeMetaData))
{
args.PushMarkup(Loc.GetString("gun-chamber-examine", ("color", ModeExamineColor),
("cartridge", cartridgeMetaData.EntityName)), -1);
}
else
args.PushMarkup(Loc.GetString("gun-chamber-examine-empty", ("color", ModeExamineBadColor)), -1);
if (TryComp<MetaDataComponent>(magazine, out var magazineMetaData))
{
args.PushMarkup(Loc.GetString("gun-inserted-magazine-examine", ("color", ModeExamineColor),
("magazine", magazineMetaData.EntityName)), -2);
}
// WWDP edit end
}
}
@@ -402,7 +419,7 @@ public abstract partial class SharedGunSystem
}
// If no more ammo then open bolt.
if (relayedArgs.Ammo.Count == 0)
if (relayedArgs.Ammo.Count == 0 && component.BoltCatch) // WWDP bolt catch
{
SetBoltClosed(uid, component, false, user: args.User, appearance: appearance);
}

View File

@@ -16,19 +16,26 @@ public abstract partial class SharedGunSystem
using (args.PushGroup(nameof(GunComponent)))
{
if (component.SelectedMode == component.AvailableModes) // WWDP IF THERE IS ONLY ONE MODE DONT WRITE IT
return;
args.PushMarkup(Loc.GetString("gun-selected-mode-examine", ("color", ModeExamineColor),
("mode", GetLocSelector(component.SelectedMode))));
args.PushMarkup(Loc.GetString("gun-fire-rate-examine", ("color", FireRateExamineColor),
/* WWDP no firerate on examine
args.PushMarkup(Loc.GetString("gun-fire-rate-examine", ("color", FireRateExamineColor),
("fireRate", $"{(int) (component.FireRate * 60)}")));
*/
if (!component.AvailableModes.HasFlag(SelectiveFire.Burst))
return;
/* WWDP no firerate on examine
if (component.FireRate != component.BurstFireRate)
args.PushMarkup(Loc.GetString("gun-burst-fire-rate-examine", ("color", FireRateExamineColor),
("fireRate", $"{(int) (component.BurstFireRate * 60)}")));
*/
args.PushMarkup(Loc.GetString("gun-burst-fire-burst-count", ("color", FireRateExamineColor),
args.PushMarkup(Loc.GetString("gun-burst-fire-burst-count", ("color", ModeExamineColor),
("burstcount", $"{component.ShotsPerBurst}")));
}
}

View File

@@ -1,6 +1,7 @@
using Content.Shared.Examine;
using Content.Shared.Interaction.Events;
using Content.Shared.Verbs;
using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Events;
using Robust.Shared.Containers;

View File

@@ -8,6 +8,7 @@ using Robust.Shared.Serialization;
using Robust.Shared.Utility;
using System;
using System.Linq;
using Content.Shared.Examine;
using Content.Shared.Interaction.Events;
using JetBrains.Annotations;
@@ -21,14 +22,34 @@ public partial class SharedGunSystem
{
SubscribeLocalEvent<RevolverAmmoProviderComponent, ComponentGetState>(OnRevolverGetState);
SubscribeLocalEvent<RevolverAmmoProviderComponent, ComponentHandleState>(OnRevolverHandleState);
SubscribeLocalEvent<RevolverAmmoProviderComponent, MapInitEvent>(OnRevolverInit);
SubscribeLocalEvent<RevolverAmmoProviderComponent, ComponentInit>(OnRevolverInit); // WWDP
SubscribeLocalEvent<RevolverAmmoProviderComponent, TakeAmmoEvent>(OnRevolverTakeAmmo);
SubscribeLocalEvent<RevolverAmmoProviderComponent, GetVerbsEvent<AlternativeVerb>>(OnRevolverVerbs);
SubscribeLocalEvent<RevolverAmmoProviderComponent, InteractUsingEvent>(OnRevolverInteractUsing);
SubscribeLocalEvent<RevolverAmmoProviderComponent, GetAmmoCountEvent>(OnRevolverGetAmmoCount);
SubscribeLocalEvent<RevolverAmmoProviderComponent, UseInHandEvent>(OnRevolverUse);
SubscribeLocalEvent<RevolverAmmoProviderComponent, ExaminedEvent>(OnRevolverExamine); // WWDP
}
// WWDP examine
private void OnRevolverExamine(EntityUid uid, RevolverAmmoProviderComponent component, ExaminedEvent args)
{
if (!args.IsInDetailsRange)
return;
var loadedCount = 0;
foreach (var chamber in component.Chambers)
{
if (chamber != null)
loadedCount++;
}
args.PushMarkup(Loc.GetString("gun-revolver-examine", ("color", ModeExamineColor),
("count", loadedCount)), -1);
}
// WWDP edit end
private void OnRevolverUse(EntityUid uid, RevolverAmmoProviderComponent component, UseInHandEvent args)
{
if (!_useDelay.TryResetDelay(uid))
@@ -418,7 +439,7 @@ public partial class SharedGunSystem
component.CurrentIndex = (component.CurrentIndex + count) % component.Capacity;
}
private void OnRevolverInit(EntityUid uid, RevolverAmmoProviderComponent component, MapInitEvent args)
private void OnRevolverInit(EntityUid uid, RevolverAmmoProviderComponent component, ComponentInit args) // WWDP
{
component.AmmoContainer = Containers.EnsureContainer<Container>(uid, RevolverContainer);
component.AmmoSlots.EnsureCapacity(component.Capacity);

View File

@@ -76,8 +76,8 @@ public abstract partial class SharedGunSystem : EntitySystem
private const double SafetyNextFire = 0.5;
private const float EjectOffset = 0.4f;
protected const string AmmoExamineColor = "yellow";
protected const string FireRateExamineColor = "yellow";
public const string ModeExamineColor = "cyan";
public const string ModeExamineColor = "crimson"; // WWDP examine
public const string ModeExamineBadColor = "pink"; // WWDP examine
public override void Initialize()
{

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -2,3 +2,8 @@
license: "CC-BY-NC-SA-4.0"
copyright: "Taken from White Dream"
source: "https://github.com/frosty-dev/ss14-core/blob/master/Resources/Audio/White/Gun/insert.ogg"
- files: ["shotgun_rack.ogg"]
license: "CC-BY-NC-SA-4.0"
copyright: "Made by vanx for WWDP"
source: "https://github.com/WWhiteDreamProject/wwdpublic"

Binary file not shown.

View File

@@ -45,3 +45,7 @@ comp-hands-examine-empty-selfaware = You are not holding anything.
comp-hands-examine-selfaware = You are holding { $items }.
humanoid-appearance-component-examine-selfaware = You are { INDEFINITE($age) } { $age } { $species }.
# Description examine wrapper
examine-entity-description-wrapper = [font size=11][italic]{ $description }[/italic][/font]

View File

@@ -0,0 +1,22 @@
gun-chamber-examine = - It has a [color={$color}]{$cartridge}[/color] in the chamber.
gun-chamber-examine-empty = - The chamber is [color={$color}]empty[/color].
gun-inserted-magazine-examine = - It is loaded with a [color={$color}]{$magazine}[/color].
gun-ammocount-examine = It has [color={$color}]{$count}[/color] shots remaining.
gun-racked-examine = - It is [color={$color}]racked[/color].
gun-racked-examine-not = - It is [color={$color}]not racked[/color].
gun-revolver-examine =
{ $count ->
[0] - It is [color={$color}]empty[/color].
[1] - It is loaded with [color={$color}]{ $count }[/color] cartridge.
*[other] - It is loaded with [color={$color}]{ $count }[/color] cartridges.
}
gun-ballistic-extract = Extract
gun-ballistic-full = Full!
gun-ballistic-empty = Empty!
ammo-top-round-examine = It has a [color={$color}]{ $round }[/color] loaded on top.

View File

@@ -45,3 +45,7 @@ comp-hands-examine-empty-selfaware = Вы ничего не держите.
comp-hands-examine-selfaware = Вы держите { $items }.
humanoid-appearance-component-examine-selfaware = Вы - { $species } { $age }.
# Description examine wrapper
examine-entity-description-wrapper = [font size=11][italic][color=SlateGray]{ $description }[/color][/italic][/font]

View File

@@ -0,0 +1,25 @@
gun-chamber-examine = - В патроннике [color={$color}]{$cartridge}[/color].
gun-chamber-examine-empty = - Патронник [color={$color}]пуст[/color].
gun-inserted-magazine-examine = - Вставлен [color={$color}]{$magazine}[/color].
gun-ammocount-examine = Осталось [color={$color}]{$count}[/color] патронов.
gun-racked-examine = - Затвор [color={$color}]взведён[/color].
gun-racked-examine-not = - Затвор [color={$color}]не взведён[/color].
gun-revolver-examine =
{ $count ->
[0] - Барабан [color={$color}]пуст[/color].
[1] - В барабане [color={$color}]{ $count }[/color] патрон.
[2] - В барабане [color={$color}]{ $count }[/color] патрона.
[3] - В барабане [color={$color}]{ $count }[/color] патрона.
[4] - В барабане [color={$color}]{ $count }[/color] патрона.
*[other] - В барабане [color={$color}]{ $count }[/color] патронов.
}
gun-ballistic-extract = Извлечь
gun-ballistic-full = Полон!
gun-ballistic-empty = Пуст!
ammo-top-round-examine = Сверху заряжен [color={$color}]{ $round }[/color].

View File

@@ -22,6 +22,8 @@
soundEmpty:
path: /Audio/Weapons/Guns/Empty/empty.ogg
- type: BallisticAmmoProvider
soundRack: # WWDP
path: /Audio/_White/Guns/shotgun_rack.ogg
# autoCycle: true
whitelist:
tags:

View File

@@ -10,9 +10,12 @@
- type: Item
size: Huge
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle4.ogg # WWDP
quickEquip: false
slots:
- back
- type: EmitSoundOnPickup # WWDP
sound: /Audio/_White/Equip/clothingrustle2.ogg
- type: Storage
grid:
- 0,0,6,3

View File

@@ -579,6 +579,8 @@
- type: Item
size: Huge
- type: BallisticAmmoProvider
soundInsert: # WWDP
path: /Audio/Weapons/Guns/MagIn/shotgun_insert.ogg
whitelist:
tags:
- ShellShotgun

View File

@@ -17,6 +17,8 @@
abstract: true
components:
- type: BallisticAmmoProvider
soundInsert:
path: /Audio/Weapons/Guns/MagIn/shotgun_insert.ogg # WWDP
mayTransfer: true
whitelist:
tags:

View File

@@ -7,6 +7,7 @@
- type: Item
size: Huge
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle4.ogg # WWDP
sprite: Objects/Weapons/Guns/Battery/laser_retro.rsi
quickEquip: false
slots:
@@ -49,6 +50,15 @@
Blunt: 2.5
- type: DamageOtherOnHit
staminaCost: 7
- type: EmitSoundOnPickup # WWDP sounds
sound:
collection: LasersPickUp
- type: EmitSoundOnDrop # WWDP sounds
sound:
collection: LasersDrop
- type: EmitSoundOnLand # WWDP sounds
sound:
collection: LasersDrop
# Shitmed Change
- type: Cautery
speed: 0.9

View File

@@ -9,6 +9,7 @@
- type: Item
size: Huge
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle4.ogg # WWDP
sprite: Objects/Weapons/Guns/LMGs/l6.rsi
quickEquip: false
slots:
@@ -28,6 +29,7 @@
maxAngle: 45
angleIncrease: 4
angleDecay: 16
boltCatch: false # WWDP
fireRate: 8
selectedMode: FullAuto
availableModes:
@@ -39,7 +41,7 @@
- type: ChamberMagazineAmmoProvider
soundRack:
path: /Audio/Weapons/Guns/Cock/lmg_cock.ogg
- type: AmmoCounter
# - type: AmmoCounter # WWDP
- type: ItemSlots
slots:
gun_magazine:
@@ -85,6 +87,15 @@
Blunt: 3
- type: DamageOtherOnHit
staminaCost: 12
- type: EmitSoundOnPickup # WWDP sounds
sound:
collection: RiflesPickUp
- type: EmitSoundOnDrop # WWDP sounds
sound:
collection: RiflesDrop
- type: EmitSoundOnLand # WWDP sounds
sound:
collection: RiflesDrop
- type: entity
name: L6 SAW

View File

@@ -56,7 +56,7 @@
slots:
- Back
- suitStorage
- type: AmmoCounter
# - type: AmmoCounter # WWDP
- type: Gun
fireRate: 1
selectedMode: SemiAuto
@@ -90,6 +90,7 @@
- state: mag-0
map: ["enum.GunVisualLayers.Mag"]
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle4.ogg # WWDP
sprite: Objects/Weapons/Guns/Launchers/rocket.rsi
- type: Gun
fireRate: 0.5
@@ -103,12 +104,21 @@
capacity: 1
soundInsert:
path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg
autoCycle: false # WD EDIT
autoCycle: true # WD EDIT # WWDP edit
- type: MagazineVisuals
magState: mag
steps: 2
zeroVisible: false
- type: Appearance
- type: EmitSoundOnPickup # WWDP sounds
sound:
collection: RiflesPickUp
- type: EmitSoundOnDrop # WWDP sounds
sound:
collection: RiflesDrop
- type: EmitSoundOnLand # WWDP sounds
sound:
collection: RiflesDrop
- type: Item # WWDP guns resize
shape:
- 0,0,7,1

View File

@@ -20,6 +20,7 @@
tags:
- Sidearm
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle2.ogg # WWDP
sprite: Objects/Weapons/Guns/Pistols/viper.rsi
quickEquip: false
slots:
@@ -70,7 +71,7 @@
- type: StaticPrice
price: 500
- type: Execution
- type: AmmoCounter
# - type: AmmoCounter # WWDP
- type: MeleeWeapon
attackRate: 1.2
damage:
@@ -84,6 +85,15 @@
collection: MetalThud
- type: DamageOtherOnHit
staminaCost: 5
- type: EmitSoundOnPickup # WWDP sounds
sound:
collection: PistolsPickUp
- type: EmitSoundOnDrop # WWDP sounds
sound:
collection: PistolsDrop
- type: EmitSoundOnLand # WWDP sounds
sound:
collection: PistolsDrop
- type: entity
name: viper

View File

@@ -16,6 +16,7 @@
tags:
- Sidearm
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle2.ogg # WWDP
sprite: Objects/Weapons/Guns/Revolvers/deckard.rsi
quickEquip: false
slots:
@@ -67,6 +68,15 @@
collection: MetalThud
- type: DamageOtherOnHit
staminaCost: 5
- type: EmitSoundOnPickup # WWDP sounds
sound:
collection: RevolversPickUp
- type: EmitSoundOnDrop # WWDP sounds
sound:
collection: RevolversDrop
- type: EmitSoundOnLand # WWDP sounds
sound:
collection: RevolversDrop
- type: entity
name: Deckard

View File

@@ -11,13 +11,14 @@
shape:
- 0,0,7,1
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle4.ogg # WWDP
sprite: Objects/Weapons/Guns/Rifles/ak.rsi
quickEquip: false
slots:
- Back
- suitStorage
- type: Wieldable
- type: AmmoCounter
# - type: AmmoCounter # WWDP
- type: Gun
bonusAngleIncreaseMove: 40 # wwdp
bonusAngleIncreaseTurn: 0.25 # wwdp
@@ -95,6 +96,7 @@
path: /Audio/Weapons/Guns/Gunshots/rifle2.ogg
fireOnDropChance: 0.5
- type: ChamberMagazineAmmoProvider
boltCatch: false # WWDP no zatvornaya zaderzhka kak u m-16
soundRack:
path: /Audio/Weapons/Guns/Cock/ltrifle_cock.ogg
- type: ItemSlots
@@ -124,6 +126,15 @@
steps: 1
zeroVisible: true
- type: Appearance
- type: EmitSoundOnPickup # WWDP sounds
sound:
collection: RiflesPickUp
- type: EmitSoundOnDrop # WWDP sounds
sound:
collection: RiflesDrop
- type: EmitSoundOnLand # WWDP sounds
sound:
collection: RiflesDrop
- type: entity
name: M-90gl

View File

@@ -9,12 +9,13 @@
- type: Item
size: Large
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle4.ogg # WWDP
sprite: Objects/Weapons/Guns/SMGs/atreides.rsi
quickEquip: false
slots:
- Back
- suitStorage
- type: AmmoCounter
# - type: AmmoCounter # WWDP
- type: Gun # if changing also update WeaponDisablerSMG
bonusAngleIncreaseMove: 20 # wwdp
bonusAngleIncreaseTurn: 0.4 # wwdp
@@ -79,6 +80,15 @@
Blunt: 2.5
- type: DamageOtherOnHit
staminaCost: 8
- type: EmitSoundOnPickup # WWDP sounds
sound:
collection: RiflesPickUp
- type: EmitSoundOnDrop # WWDP sounds
sound:
collection: RiflesDrop
- type: EmitSoundOnLand # WWDP sounds
sound:
collection: RiflesDrop
- type: entity
name: Atreides

View File

@@ -13,12 +13,13 @@
# If you update this also update the bulldog's size.
size: Large
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle4.ogg # WWDP
sprite: DeltaV/Objects/Weapons/Guns/Shotguns/db_shotgun.rsi # Delta-V
quickEquip: false
slots:
- Back
- suitStorage
- type: AmmoCounter
# - type: AmmoCounter # WWDP
- type: Gun # change WeaponShotgunBulldog too if updating this
bonusAngleIncreaseMove: 40 # wwdp
bonusAngleIncreaseTurn: 0.25 # wwdp
@@ -68,6 +69,15 @@
- type: DamageOtherOnHit
staminaCost: 9.5
- type: GunRequiresWield # WD EDIT
- type: EmitSoundOnPickup # WWDP sounds
sound:
collection: ShotgunsPickUp
- type: EmitSoundOnDrop # WWDP sounds
sound:
collection: ShotgunsDrop
- type: EmitSoundOnLand # WWDP sounds
sound:
collection: ShotgunsDrop
- type: entity # supposed to be similiar to pistols
name: BaseWeaponShotgunSmall
@@ -104,12 +114,13 @@
shape:
- 0,0,5,1
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle4.ogg # WWDP
sprite: Objects/Weapons/Guns/Shotguns/bulldog.rsi
quickEquip: false
slots:
- Back
- suitStorage
- type: AmmoCounter
# - type: AmmoCounter # WWDP
- type: GunRequiresWield #remove when inaccuracy on spreads is fixed
- type: Gun
bonusAngleIncreaseMove: 40 # wwdp
@@ -136,11 +147,21 @@
- MagazineShotgun
insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg
ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg
gun_chamber: # WWDP
name: Chamber
locked: true
startingItem: ShellShotgun
priority: 1
whitelist:
tags:
- ShellShotgun
- type: ContainerContainer
containers:
gun_magazine: !type:ContainerSlot
gun_chamber: !type:ContainerSlot
- type: MagazineAmmoProvider
- type: ChamberMagazineAmmoProvider # WWDP
soundRack:
path: /Audio/Weapons/Guns/Cock/sf_rifle_cock.ogg
- type: MagazineVisuals
magState: mag
steps: 1
@@ -167,6 +188,15 @@
Blunt: 2.5
- type: DamageOtherOnHit
staminaCost: 9.5
- type: EmitSoundOnPickup # WWDP sounds
sound:
collection: ShotgunsPickUp
- type: EmitSoundOnDrop # WWDP sounds
sound:
collection: ShotgunsDrop
- type: EmitSoundOnLand # WWDP sounds
sound:
collection: ShotgunsDrop
- type: entity
name: antique Bulldog
@@ -234,6 +264,8 @@
- 0,0,5,1
sprite: Objects/Weapons/Guns/Shotguns/enforcer_inhands_64x.rsi
- type: BallisticAmmoProvider
soundRack: # WWDP
path: /Audio/_White/Guns/shotgun_rack.ogg
- type: Wieldable
- type: MeleeWeapon
attackRate: 1.4
@@ -268,6 +300,8 @@
sprite: Objects/Weapons/Guns/Shotguns/pump.rsi
- type: BallisticAmmoProvider
capacity: 4
soundRack:
path: /Audio/_White/Guns/shotgun_rack.ogg
- type: Tag
tags:
- WeaponShotgunKammerer

View File

@@ -12,12 +12,13 @@
- type: Item
size: Huge
- type: Clothing
equipSound: /Audio/_White/Equip/clothingrustle4.ogg # WWDP
sprite: Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi
quickEquip: false
slots:
- Back
- suitStorage
- type: AmmoCounter
# - type: AmmoCounter # WWDP
- type: Wieldable
- type: GunRequiresWield
- type: Gun
@@ -32,6 +33,8 @@
soundGunshot:
path: /Audio/Weapons/Guns/Gunshots/sniper.ogg
- type: BallisticAmmoProvider
soundRack: # WWDP
path: /Audio/Weapons/Guns/Cock/sf_rifle_cock.ogg
capacity: 10
proto: CartridgeLightRifle
whitelist:
@@ -63,6 +66,15 @@
Blunt: 2.5
- type: DamageOtherOnHit
staminaCost: 7.5
- type: EmitSoundOnPickup # WWDP sounds
sound:
collection: SnipersPickUp
- type: EmitSoundOnDrop # WWDP sounds
sound:
collection: SnipersDrop
- type: EmitSoundOnLand # WWDP sounds
sound:
collection: SnipersDrop
- type: entity
name: Kardashev-Mosin
@@ -148,6 +160,8 @@
- 0,0,6,1 # needs to fit in a briefcase, collapsible stock or something
sprite: _White/Objects/Weapons/Guns/Snipers/hristov-inhands.rsi
- type: BallisticAmmoProvider
soundRack: # WWDP
path: /Audio/Weapons/Guns/Cock/batrifle_cock.ogg
soundInsert: /Audio/_White/Guns/insert.ogg
whitelist:
tags:
@@ -191,6 +205,7 @@
- type: UseDelay
delay: 8 #it's a musket
- type: BallisticAmmoProvider
autoCycle: true # WWDP
whitelist:
tags:
- CartridgeMusket # DeltaV - musket instead of anti materiel ammo
@@ -244,6 +259,7 @@
- type: UseDelay
delay: 8 #it's a flintlock
- type: BallisticAmmoProvider
autoCycle: true # WWDP
whitelist:
tags:
- CartridgeMusket # DeltaV - musket instead of anti materiel ammo

View File

@@ -72,4 +72,4 @@
suffix: Security Loadouts
components:
- type: GuideHelp
guides: [ SecurityWeapons ]
guides: [ SecurityWeapons ]

View File

@@ -1,7 +1,7 @@
- type: entity
name: proto-kinetic shotgun
id: WeaponProtoKineticShotgun
parent: [WeaponProtoKineticAcceleratorBase]
parent: [WeaponProtoKineticAcceleratorBase, BaseGunWieldable] # WWDP
description: Fires a spread of low-damage kinetic bolts.
components:
- type: Sprite
@@ -42,7 +42,7 @@
- type: entity
name: proto-kinetic repeater
id: WeaponProtoKineticRepeater
parent: [WeaponProtoKineticAcceleratorBase]
parent: [WeaponProtoKineticAcceleratorBase, BaseGunWieldable] # WWDP
description: Fires a barrage of kinetic bolts at a short range.
components:
- type: Sprite

View File

@@ -12,6 +12,11 @@
- type: StaticPrice
price: 500
- type: BallisticAmmoProvider
autoCycle: false # WWDP
soundRack: # WWDP
path: /Audio/Weapons/Guns/Cock/batrifle_cock.ogg
params:
volume: -3
whitelist:
tags:
- CartridgeMagnum

View File

@@ -0,0 +1,86 @@
- type: soundCollection
id: RiflesPickUp
files:
- /Audio/_White/Equip/Rifle/pickup1.ogg
- /Audio/_White/Equip/Rifle/pickup2.ogg
- /Audio/_White/Equip/Rifle/pickup3.ogg
- type: soundCollection
id: RiflesDrop
files:
- /Audio/_White/Equip/Rifle/drop1.ogg
- /Audio/_White/Equip/Rifle/drop2.ogg
- type: soundCollection
id: PistolsPickUp
files:
- /Audio/_White/Equip/Pistol/pickup1.ogg
- /Audio/_White/Equip/Pistol/pickup2.ogg
- /Audio/_White/Equip/Pistol/pickup3.ogg
- /Audio/_White/Equip/Pistol/pickup4.ogg
- type: soundCollection
id: PistolsDrop
files:
- /Audio/_White/Equip/Pistol/drop1.ogg
- /Audio/_White/Equip/Pistol/drop2.ogg
- /Audio/_White/Equip/Pistol/drop3.ogg
- type: soundCollection
id: LasersPickUp
files:
- /Audio/_White/Equip/Laser/pickup1.ogg
- /Audio/_White/Equip/Laser/pickup2.ogg
- type: soundCollection
id: LasersDrop
files:
- /Audio/_White/Equip/Laser/drop1.ogg
- type: soundCollection
id: PulsePickUp
files:
- /Audio/_White/Equip/Pulse/pickup1.ogg
- type: soundCollection
id: PulseDrop
files:
- /Audio/_White/Equip/Pulse/drop1.ogg
- type: soundCollection
id: SnipersPickUp
files:
- /Audio/_White/Equip/Sniper/pickup1.ogg
- /Audio/_White/Equip/Sniper/pickup2.ogg
- type: soundCollection
id: SnipersDrop
files:
- /Audio/_White/Equip/Sniper/drop1.ogg
- /Audio/_White/Equip/Sniper/drop2.ogg
- /Audio/_White/Equip/Sniper/drop3.ogg
- type: soundCollection
id: ShotgunsPickUp
files:
- /Audio/_White/Equip/Shotgun/pickup1.ogg
- /Audio/_White/Equip/Shotgun/pickup2.ogg
- /Audio/_White/Equip/Shotgun/pickup3.ogg
- type: soundCollection
id: ShotgunsDrop
files:
- /Audio/_White/Equip/Shotgun/drop1.ogg
- /Audio/_White/Equip/Shotgun/drop2.ogg
- type: soundCollection
id: RevolversPickUp
files:
- /Audio/_White/Equip/Revolver/pickup1.ogg
- /Audio/_White/Equip/Revolver/pickup2.ogg
- type: soundCollection
id: RevolversDrop
files:
- /Audio/_White/Equip/Revolver/drop1.ogg
- /Audio/_White/Equip/Revolver/drop2.ogg