Продвинутое энергетическое оружие (#59)
* added advanced energy gun (AEG) * added traitor objective targeting HoS' new gun * fixed formatting * added research tech unlocking energy weaponry * me stupid
57
Content.Server/_Sunrise/Weapons/EnergyGunComponent.cs
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
using Content.Server.Weapons.Ranged.Systems;
|
||||
|
||||
namespace Content.Server.Weapons.Ranged.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Allows for energy gun to switch between three modes. This also changes the sprite accordingly.
|
||||
/// </summary>
|
||||
/// <remarks>This is BatteryWeaponFireModesSystem with additional changes to allow for different sprites.</remarks>
|
||||
[RegisterComponent]
|
||||
[Access(typeof(EnergyGunSystem))]
|
||||
[AutoGenerateComponentState]
|
||||
public sealed partial class EnergyGunComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// A list of the different firing modes the energy gun can switch between
|
||||
/// </summary>
|
||||
[DataField("fireModes", required: true)]
|
||||
[AutoNetworkedField]
|
||||
public List<EnergyWeaponFireMode> FireModes = new();
|
||||
|
||||
/// <summary>
|
||||
/// The currently selected firing mode
|
||||
/// </summary>
|
||||
[DataField("currentFireMode")]
|
||||
[AutoNetworkedField]
|
||||
public EnergyWeaponFireMode? CurrentFireMode = default!;
|
||||
}
|
||||
|
||||
[DataDefinition]
|
||||
public sealed partial class EnergyWeaponFireMode
|
||||
{
|
||||
/// <summary>
|
||||
/// The projectile prototype associated with this firing mode
|
||||
/// </summary>
|
||||
[DataField("proto", required: true, customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
public string Prototype = default!;
|
||||
|
||||
/// <summary>
|
||||
/// The battery cost to fire the projectile associated with this firing mode
|
||||
/// </summary>
|
||||
[DataField("fireCost")]
|
||||
public float FireCost = 100;
|
||||
|
||||
/// <summary>
|
||||
/// The name of the selected firemode
|
||||
/// </summary>
|
||||
[DataField("name")]
|
||||
public string Name = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// What RsiState we use for that firemode if it needs to change.
|
||||
/// </summary>
|
||||
[DataField("state")]
|
||||
public string State = string.Empty;
|
||||
}
|
||||
159
Content.Server/_Sunrise/Weapons/EnergyGunSystem.cs
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
using Content.Server.Popups;
|
||||
using Content.Server.Weapons.Ranged.Components;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Interaction;
|
||||
using Content.Shared.Verbs;
|
||||
using Content.Shared.Item;
|
||||
using Content.Shared._Sunrise.Weapons.Ranged;
|
||||
using Content.Shared.Weapons.Ranged.Components;
|
||||
using Robust.Shared.Prototypes;
|
||||
using System.Linq;
|
||||
using System;
|
||||
|
||||
namespace Content.Server.Weapons.Ranged.Systems;
|
||||
public sealed class EnergyGunSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly PopupSystem _popupSystem = default!;
|
||||
[Dependency] private readonly SharedItemSystem _item = default!;
|
||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<EnergyGunComponent, ActivateInWorldEvent>(OnInteractHandEvent);
|
||||
SubscribeLocalEvent<EnergyGunComponent, GetVerbsEvent<Verb>>(OnGetVerb);
|
||||
SubscribeLocalEvent<EnergyGunComponent, ExaminedEvent>(OnExamined);
|
||||
}
|
||||
|
||||
private void OnExamined(EntityUid uid, EnergyGunComponent component, ExaminedEvent args)
|
||||
{
|
||||
if (component.FireModes == null || component.FireModes.Count < 2)
|
||||
return;
|
||||
|
||||
if (component.CurrentFireMode == null)
|
||||
{
|
||||
SetFireMode(uid, component, component.FireModes.First());
|
||||
}
|
||||
|
||||
if (component.CurrentFireMode?.Prototype == null)
|
||||
return;
|
||||
|
||||
if (!_prototypeManager.TryIndex<EntityPrototype>(component.CurrentFireMode.Prototype, out var proto))
|
||||
return;
|
||||
|
||||
args.PushMarkup(Loc.GetString("energygun-examine-fire-mode", ("mode", Loc.GetString(component.CurrentFireMode.Name))));
|
||||
}
|
||||
|
||||
private void OnGetVerb(EntityUid uid, EnergyGunComponent component, GetVerbsEvent<Verb> args)
|
||||
{
|
||||
if (!args.CanAccess || !args.CanInteract || args.Hands == null)
|
||||
return;
|
||||
|
||||
if (component.FireModes == null || component.FireModes.Count < 2)
|
||||
return;
|
||||
|
||||
if (component.CurrentFireMode == null)
|
||||
{
|
||||
SetFireMode(uid, component, component.FireModes.First());
|
||||
}
|
||||
|
||||
foreach (var fireMode in component.FireModes)
|
||||
{
|
||||
var entProto = _prototypeManager.Index<EntityPrototype>(fireMode.Prototype);
|
||||
|
||||
var v = new Verb
|
||||
{
|
||||
Priority = 1,
|
||||
Category = VerbCategory.SelectType,
|
||||
Text = entProto.Name,
|
||||
Disabled = fireMode == component.CurrentFireMode,
|
||||
Impact = LogImpact.Low,
|
||||
DoContactInteraction = true,
|
||||
Act = () =>
|
||||
{
|
||||
SetFireMode(uid, component, fireMode, args.User);
|
||||
}
|
||||
};
|
||||
|
||||
args.Verbs.Add(v);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnInteractHandEvent(EntityUid uid, EnergyGunComponent component, ActivateInWorldEvent args)
|
||||
{
|
||||
if (component.FireModes == null || component.FireModes.Count < 2)
|
||||
return;
|
||||
|
||||
CycleFireMode(uid, component, args.User);
|
||||
}
|
||||
|
||||
private void CycleFireMode(EntityUid uid, EnergyGunComponent component, EntityUid user)
|
||||
{
|
||||
int index = (component.CurrentFireMode != null) ?
|
||||
Math.Max(component.FireModes.IndexOf(component.CurrentFireMode), 0) + 1 : 1;
|
||||
|
||||
EnergyWeaponFireMode? fireMode;
|
||||
|
||||
if (index >= component.FireModes.Count)
|
||||
{
|
||||
fireMode = component.FireModes.FirstOrDefault();
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
fireMode = component.FireModes[index];
|
||||
}
|
||||
|
||||
SetFireMode(uid, component, fireMode, user);
|
||||
}
|
||||
|
||||
private void SetFireMode(EntityUid uid, EnergyGunComponent component, EnergyWeaponFireMode? fireMode, EntityUid? user = null)
|
||||
{
|
||||
if (fireMode?.Prototype == null)
|
||||
return;
|
||||
|
||||
component.CurrentFireMode = fireMode;
|
||||
|
||||
if (TryComp(uid, out ProjectileBatteryAmmoProviderComponent? projectileBatteryAmmoProvider))
|
||||
{
|
||||
if (!_prototypeManager.TryIndex<EntityPrototype>(fireMode.Prototype, out var prototype))
|
||||
return;
|
||||
|
||||
projectileBatteryAmmoProvider.Prototype = fireMode.Prototype;
|
||||
projectileBatteryAmmoProvider.FireCost = fireMode.FireCost;
|
||||
|
||||
if (user != null)
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("gun-set-fire-mode", ("mode", Loc.GetString(component.CurrentFireMode.Name))), uid, user.Value);
|
||||
}
|
||||
|
||||
if (component.CurrentFireMode.State == string.Empty)
|
||||
return;
|
||||
|
||||
if (TryComp<AppearanceComponent>(uid, out var _) && TryComp<ItemComponent>(uid, out var item))
|
||||
{
|
||||
_item.SetHeldPrefix(uid, component.CurrentFireMode.State, false, item);
|
||||
switch (component.CurrentFireMode.State)
|
||||
{
|
||||
case "disabler":
|
||||
UpdateAppearance(uid, EnergyGunFireModeState.Disabler);
|
||||
break;
|
||||
case "lethal":
|
||||
UpdateAppearance(uid, EnergyGunFireModeState.Lethal);
|
||||
break;
|
||||
case "special":
|
||||
UpdateAppearance(uid, EnergyGunFireModeState.Special);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateAppearance(EntityUid uid, EnergyGunFireModeState state)
|
||||
{
|
||||
_appearance.SetData(uid, EnergyGunFireModeVisuals.State, state);
|
||||
}
|
||||
}
|
||||
17
Content.Shared/_Sunrise/Weapons/EnergyGunFireModeVisuals.cs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._Sunrise.Weapons.Ranged;
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum EnergyGunFireModeVisuals : byte
|
||||
{
|
||||
State
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum EnergyGunFireModeState : byte
|
||||
{
|
||||
Disabler,
|
||||
Lethal,
|
||||
Special
|
||||
}
|
||||
1
Resources/Locale/en-US/_sunrise/ranged/energygun.ftl
Normal file
|
|
@ -0,0 +1 @@
|
|||
energygun-examine-fire-mode = The firemode is set to {$mode}
|
||||
|
|
@ -35,6 +35,9 @@ research-technology-portable-microfusion-weaponry = Portable Microfusion Weaponr
|
|||
research-technology-experimental-battery-ammo = Experimental Battery Ammo
|
||||
research-technology-basic-shuttle-armament = Shuttle basic armament
|
||||
research-technology-advanced-shuttle-weapon = Advanced shuttle weapons
|
||||
research-technology-energy-gun = Energy weaponry
|
||||
research-technology-energy-gun-advance = Advanced energy weaponry
|
||||
research-technology-advance-laser = Military-grade energy weaponry
|
||||
|
||||
research-technology-basic-robotics = Basic Robotics
|
||||
research-technology-basic-anomalous-research = Basic Anomalous Research
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ ent-HandTeleporterStealObjective = { ent-BaseRDStealObjective }
|
|||
.desc = { ent-BaseRDStealObjective.desc }
|
||||
ent-SecretDocumentsStealObjective = { ent-BaseTraitorStealObjective }
|
||||
.desc = { ent-BaseTraitorStealObjective.desc }
|
||||
ent-MultiphaseEnergygunStealObjective = { ent-BaseTraitorStealObjective }
|
||||
.desc = { ent-BaseTraitorStealObjective.desc }
|
||||
ent-MagbootsStealObjective = { ent-BaseTraitorStealObjective }
|
||||
.desc = { ent-BaseTraitorStealObjective.desc }
|
||||
ent-ClipboardStealObjective = { ent-BaseTraitorStealObjective }
|
||||
|
|
|
|||
19
Resources/Locale/ru-RU/_sunrise/ranged/energygun.ftl
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
energygun-examine-fire-mode = Режим огня установлен на {$mode}
|
||||
|
||||
ent-WeaponEnergyGun = Энергетическая пушка
|
||||
.desc = Базовая гибридная энергетическая с двумя режимами работы: обезоруживание и летал.
|
||||
|
||||
ent-WeaponEnergyGunMultiphase = X-01 Мультифазный энергетический карабин
|
||||
.desc = Это дорогая современная реконструкция старинного лазерного пистолета. Пистолет имеет несколько уникальных режимов стрельбы, но лишен возможности перезаряжаться со временем.
|
||||
|
||||
ent-WeaponEnergyGunMini = миниатюрная энергетическая пушка
|
||||
.desc = Облегченная версия энергетического пистолета с меньшей емкостью.
|
||||
|
||||
ent-WeaponEnergyGunPistol = Энергетический пистолет PDW-9
|
||||
.desc = Военное оружие, используемое многими ополченцами в местном секторе.
|
||||
|
||||
ent-WeaponGunLaserCarbineAutomatic = Лазерный карабин ИК-60
|
||||
.desc = Лазерный полуавтоматический карабин на 20 патронов.
|
||||
|
||||
energy-gun-lethal = летал
|
||||
energy-gun-disable = обезоруживание
|
||||
|
|
@ -66,3 +66,6 @@ research-technology-honk-mech = Мех Х.О.Н.К.
|
|||
research-technology-advanced-spray = Продвинутые спреи
|
||||
research-technology-quantum-fiber-weaving = Плетение квантового волокна
|
||||
research-technology-bluespace-cargo-transport = Блюспейс-транспортировка грузов
|
||||
research-technology-energy-gun = Энергетическое вооружение
|
||||
research-technology-energy-gun-advance = Продвинутое энергетическое вооружение
|
||||
research-technology-advance-laser = Военное энергетическое вооружение
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ ent-HandTeleporterStealObjective = { ent-BaseRDStealObjective }
|
|||
.desc = { ent-BaseRDStealObjective.desc }
|
||||
ent-SecretDocumentsStealObjective = { ent-BaseTraitorStealObjective }
|
||||
.desc = { ent-BaseTraitorStealObjective.desc }
|
||||
ent-MultiphaseEnergygunStealObjective = { ent-BaseTraitorStealObjective }
|
||||
.desc = { ent-BaseTraitorStealObjective.desc }
|
||||
ent-MagbootsStealObjective = { ent-BaseTraitorStealObjective }
|
||||
.desc = { ent-BaseTraitorStealObjective.desc }
|
||||
ent-ClipboardStealObjective = { ent-BaseTraitorStealObjective }
|
||||
|
|
|
|||
|
|
@ -275,8 +275,7 @@
|
|||
- id: ClothingMaskGasSwat
|
||||
# - id: ClothingShoeSlippersDuck: Need more space for style
|
||||
# prob: 0.2
|
||||
- id: DrinkVacuumFlask
|
||||
prob: 0.8
|
||||
- id: WeaponEnergyGunMultiphase # Sunrise-AEG
|
||||
- id: ClothingBeltSecurityFilled
|
||||
- id: ClothingHeadsetAltSecurity
|
||||
- id: ClothingEyesGlassesSecurity
|
||||
|
|
@ -316,6 +315,7 @@
|
|||
- id: BoxEncryptionKeySecurity
|
||||
- id: HoloprojectorSecurity
|
||||
- id: BookSecretDocuments
|
||||
- id: WeaponEnergyGunMultiphase # Sunrise-AEG
|
||||
|
||||
- type: entity
|
||||
id: LockerFreezerVaultFilled
|
||||
|
|
|
|||
|
|
@ -1108,3 +1108,44 @@
|
|||
soundHit:
|
||||
collection: WeakHit
|
||||
soundForce: true
|
||||
|
||||
# Sunrise-AEG
|
||||
- type: entity
|
||||
name: energy bolt
|
||||
id: BulletEnergyGunLaser
|
||||
parent: BaseBullet
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: Reflective
|
||||
reflective:
|
||||
- Energy
|
||||
- type: FlyBySound
|
||||
sound:
|
||||
collection: EnergyMiss
|
||||
params:
|
||||
volume: 5
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi
|
||||
layers:
|
||||
- state: omnilaser_greyscale
|
||||
shader: unshaded
|
||||
color: red
|
||||
- type: Ammo
|
||||
- type: Physics
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
projectile:
|
||||
shape:
|
||||
!type:PhysShapeAabb
|
||||
bounds: "-0.2,-0.2,0.2,0.2"
|
||||
hard: false
|
||||
mask:
|
||||
- Opaque
|
||||
fly-by: *flybyfixture
|
||||
- type: Projectile
|
||||
impactEffect: BulletImpactEffectRedDisabler
|
||||
damage:
|
||||
types:
|
||||
Heat: 20 # Slightly more damage than the 17heat from the Captain's Hitscan lasgun
|
||||
soundHit:
|
||||
collection: WeakHit
|
||||
|
|
|
|||
|
|
@ -221,6 +221,10 @@
|
|||
- RiotShield
|
||||
- SpeedLoaderMagnum
|
||||
- SpeedLoaderMagnumEmpty
|
||||
- WeaponEnergyGun # Sunrise - Energy Gun
|
||||
- WeaponEnergyGunMini # Sunrise - Miniature Energy Gun
|
||||
- WeaponEnergyGunPistol # Sunrise - PDW-9 Energy Pistol
|
||||
- WeaponGunLaserCarbineAutomatic # Sunrise - IK-60 Laser Carbine
|
||||
|
||||
- type: entity
|
||||
id: AutolatheHyperConvection
|
||||
|
|
|
|||
|
|
@ -35,6 +35,13 @@
|
|||
sprite: Objects/Misc/bureaucracy.rsi
|
||||
state: folder-sec-doc
|
||||
|
||||
- type: stealTargetGroup # Sunrise-AEG
|
||||
id: WeaponEnergyGunMultiphase
|
||||
name: x-01 multiphase energy gun
|
||||
sprite:
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/multiphase_energygun.rsi
|
||||
state: base
|
||||
|
||||
- type: stealTargetGroup
|
||||
id: ClothingShoesBootsMagAdv
|
||||
name: advanced magboots
|
||||
|
|
|
|||
|
|
@ -207,6 +207,19 @@
|
|||
stealGroup: BookSecretDocuments
|
||||
owner: job-name-hos
|
||||
|
||||
- type: entity # Sunrise-AEG
|
||||
parent: BaseTraitorStealObjective
|
||||
id: MultiphaseEnergygunStealObjective
|
||||
components:
|
||||
- type: Objective
|
||||
# hos has a gun ce does not, higher difficulty than most
|
||||
difficulty: 3
|
||||
- type: NotJobRequirement
|
||||
job: HeadOfSecurity
|
||||
- type: StealCondition
|
||||
stealGroup: WeaponEnergyGunMultiphase
|
||||
owner: job-name-hos
|
||||
|
||||
## ce
|
||||
|
||||
- type: entity
|
||||
|
|
|
|||
|
|
@ -0,0 +1,261 @@
|
|||
- type: entity
|
||||
name: energy gun
|
||||
parent: BaseWeaponBattery
|
||||
id: WeaponEnergyGun
|
||||
description: "A basic hybrid energy gun with two settings: disable and kill."
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/energygun.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mode-disabler
|
||||
shader: unshaded
|
||||
map: [ "Firemode" ]
|
||||
- state: mag-unshaded-4
|
||||
map: ["enum.GunVisualLayers.MagUnshaded"]
|
||||
shader: unshaded
|
||||
- type: Clothing
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/energygun.rsi
|
||||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/laser.ogg
|
||||
soundEmpty:
|
||||
path: /Audio/Weapons/Guns/Empty/empty.ogg
|
||||
- type: Battery
|
||||
maxCharge: 1000
|
||||
startingCharge: 1000
|
||||
- type: ProjectileBatteryAmmoProvider
|
||||
proto: BulletDisabler
|
||||
fireCost: 50
|
||||
- type: EnergyGun
|
||||
fireModes:
|
||||
- proto: BulletDisabler
|
||||
fireCost: 50
|
||||
name: energy-gun-disable
|
||||
state: disabler
|
||||
- proto: BulletEnergyGunLaser
|
||||
fireCost: 100
|
||||
name: energy-gun-lethal
|
||||
state: lethal
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 5
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.EnergyGunFireModeVisuals.State:
|
||||
Firemode:
|
||||
Disabler: { state: mode-disabler }
|
||||
Lethal: { state: mode-lethal }
|
||||
Special: { state: mode-stun } # Unused
|
||||
|
||||
- type: entity
|
||||
name: x-01 multiphase energy gun
|
||||
parent: BaseWeaponBatterySmall
|
||||
id: WeaponEnergyGunMultiphase
|
||||
description: This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/multiphase_energygun.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mode-disabler
|
||||
shader: unshaded
|
||||
map: [ "Firemode" ]
|
||||
- state: mag-unshaded-4
|
||||
map: ["enum.GunVisualLayers.MagUnshaded"]
|
||||
shader: unshaded
|
||||
- type: Clothing
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/multiphase_energygun.rsi
|
||||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/laser.ogg
|
||||
soundEmpty:
|
||||
path: /Audio/Weapons/Guns/Empty/empty.ogg
|
||||
- type: Battery
|
||||
maxCharge: 1000
|
||||
startingCharge: 1000
|
||||
- type: ProjectileBatteryAmmoProvider
|
||||
proto: BulletDisabler
|
||||
fireCost: 50
|
||||
- type: EnergyGun
|
||||
fireModes:
|
||||
- proto: BulletDisabler
|
||||
fireCost: 50
|
||||
name: energy-gun-disable
|
||||
state: disabler
|
||||
- proto: BulletEnergyGunLaser
|
||||
fireCost: 100
|
||||
name: energy-gun-lethal
|
||||
state: lethal
|
||||
# - proto: BulletEnergyGunIon
|
||||
# fireCost: 250
|
||||
# name: ion
|
||||
# state: special
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 5
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.EnergyGunFireModeVisuals.State:
|
||||
Firemode:
|
||||
Disabler: { state: mode-disabler }
|
||||
Lethal: { state: mode-lethal }
|
||||
Special: { state: mode-ion }
|
||||
- type: Tag
|
||||
tags:
|
||||
- HighRiskItem
|
||||
- Sidearm
|
||||
- type: StaticPrice
|
||||
price: 750
|
||||
- type: StealTarget
|
||||
stealGroup: WeaponEnergyGunMultiphase
|
||||
|
||||
- type: entity
|
||||
name: miniature energy gun
|
||||
parent: BaseWeaponBatterySmall
|
||||
id: WeaponEnergyGunMini
|
||||
description: A light version of the Energy gun with a smaller capacity.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/mini_energygun.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mode-disabler
|
||||
shader: unshaded
|
||||
map: [ "Firemode" ]
|
||||
- type: Clothing
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/mini_energygun.rsi
|
||||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/laser.ogg
|
||||
soundEmpty:
|
||||
path: /Audio/Weapons/Guns/Empty/empty.ogg
|
||||
- type: Battery
|
||||
maxCharge: 500
|
||||
startingCharge: 500
|
||||
- type: ProjectileBatteryAmmoProvider
|
||||
proto: BulletDisabler
|
||||
fireCost: 50
|
||||
- type: EnergyGun
|
||||
fireModes:
|
||||
- proto: BulletDisabler
|
||||
fireCost: 50
|
||||
name: energy-gun-disable
|
||||
state: disabler
|
||||
- proto: BulletEnergyGunLaser
|
||||
fireCost: 100
|
||||
name: energy-gun-lethal
|
||||
state: lethal
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 5
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.EnergyGunFireModeVisuals.State:
|
||||
Firemode:
|
||||
Disabler: { state: mode-disabler }
|
||||
Lethal: { state: mode-lethal }
|
||||
Special: { state: mode-stun } # Unused
|
||||
|
||||
- type: entity
|
||||
name: PDW-9 Energy Pistol
|
||||
parent: BaseWeaponBatterySmall
|
||||
id: WeaponEnergyGunPistol
|
||||
description: A military grade sidearm, used by many militia forces throughout the local sector.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/energygun_pistol.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mode-disabler
|
||||
shader: unshaded
|
||||
map: [ "Firemode" ]
|
||||
- state: mag-unshaded-4
|
||||
map: ["enum.GunVisualLayers.MagUnshaded"]
|
||||
shader: unshaded
|
||||
- type: Clothing
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/multiphase_energygun.rsi
|
||||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/laser.ogg
|
||||
soundEmpty:
|
||||
path: /Audio/Weapons/Guns/Empty/empty.ogg
|
||||
- type: Battery
|
||||
maxCharge: 800
|
||||
startingCharge: 800
|
||||
- type: ProjectileBatteryAmmoProvider
|
||||
proto: BulletDisabler
|
||||
fireCost: 50
|
||||
- type: EnergyGun
|
||||
fireModes:
|
||||
- proto: BulletDisabler
|
||||
fireCost: 50
|
||||
name: energy-gun-disable
|
||||
state: disabler
|
||||
- proto: BulletEnergyGunLaser
|
||||
fireCost: 100
|
||||
name: energy-gun-lethal
|
||||
state: lethal
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 5
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
visuals:
|
||||
enum.EnergyGunFireModeVisuals.State:
|
||||
Firemode:
|
||||
Disabler: { state: mode-disabler }
|
||||
Lethal: { state: mode-lethal }
|
||||
- type: Tag
|
||||
tags:
|
||||
- Sidearm
|
||||
- type: StaticPrice
|
||||
price: 750
|
||||
|
||||
- type: entity
|
||||
name: IK-60 laser carbine
|
||||
parent: BaseWeaponBattery
|
||||
id: WeaponGunLaserCarbineAutomatic
|
||||
description: "A 20 round semi-automatic laser carbine."
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/energygun_carbine.rsi
|
||||
layers:
|
||||
- state: base
|
||||
map: ["enum.GunVisualLayers.Base"]
|
||||
- state: mag-unshaded-4
|
||||
map: ["enum.GunVisualLayers.MagUnshaded"]
|
||||
shader: unshaded
|
||||
- type: Clothing
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/energygun_carbine.rsi
|
||||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/laser.ogg
|
||||
soundEmpty:
|
||||
path: /Audio/Weapons/Guns/Empty/empty.ogg
|
||||
selectedMode: SemiAuto
|
||||
fireRate: 3
|
||||
availableModes:
|
||||
- SemiAuto
|
||||
- type: Battery
|
||||
maxCharge: 2000
|
||||
startingCharge: 2000
|
||||
- type: ProjectileBatteryAmmoProvider
|
||||
proto: BulletEnergyGunLaser
|
||||
fireCost: 100
|
||||
- type: MagazineVisuals
|
||||
magState: mag
|
||||
steps: 5
|
||||
zeroVisible: true
|
||||
- type: Appearance
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
- type: entity
|
||||
id: BulletImpactEffectRedDisabler
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: TimedDespawn
|
||||
lifetime: 0.2
|
||||
- type: Sprite
|
||||
drawdepth: Effects
|
||||
layers:
|
||||
- shader: unshaded
|
||||
map: ["enum.EffectLayers.Unshaded"]
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles_tg.rsi
|
||||
state: impact_laser_greyscale
|
||||
color: red
|
||||
- type: EffectVisuals
|
||||
- type: Tag
|
||||
tags:
|
||||
- HideContextMenu
|
||||
43
Resources/Prototypes/_Sunrise/Recipes/Lathes/security.yml
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
- type: latheRecipe
|
||||
id: WeaponEnergyGun
|
||||
result: WeaponEnergyGun
|
||||
category: Weapons
|
||||
completetime: 8
|
||||
materials:
|
||||
Steel: 2000
|
||||
Glass: 800
|
||||
Plastic: 500
|
||||
|
||||
- type: latheRecipe
|
||||
id: WeaponEnergyGunMini
|
||||
result: WeaponEnergyGunMini
|
||||
category: Weapons
|
||||
completetime: 4
|
||||
materials:
|
||||
Steel: 1000
|
||||
Glass: 400
|
||||
Plastic: 250
|
||||
|
||||
- type: latheRecipe
|
||||
id: WeaponEnergyGunPistol
|
||||
result: WeaponEnergyGunPistol
|
||||
category: Weapons
|
||||
completetime: 10
|
||||
materials:
|
||||
Steel: 1500
|
||||
Glass: 600
|
||||
Plastic: 400
|
||||
Gold: 150
|
||||
|
||||
- type: latheRecipe
|
||||
id: WeaponGunLaserCarbineAutomatic
|
||||
result: WeaponGunLaserCarbineAutomatic
|
||||
category: Weapons
|
||||
completetime: 15
|
||||
materials:
|
||||
Steel: 2000
|
||||
Glass: 1000
|
||||
Plastic: 500
|
||||
Gold: 250
|
||||
Silver: 100
|
||||
Plasma: 500
|
||||
38
Resources/Prototypes/_Sunrise/Research/arsenal.yml
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Tier 2
|
||||
|
||||
- type: technology
|
||||
id: EnergyGuns
|
||||
name: research-technology-energy-gun #
|
||||
icon:
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/energygun.rsi
|
||||
state: icon
|
||||
discipline: Arsenal
|
||||
tier: 1
|
||||
cost: 7500
|
||||
recipeUnlocks:
|
||||
- WeaponEnergyGun
|
||||
- WeaponEnergyGunMini
|
||||
|
||||
- type: technology
|
||||
id: EnergyGunsAdvanced
|
||||
name: research-technology-energy-gun-advance #
|
||||
icon:
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/energygun_pistol.rsi
|
||||
state: icon
|
||||
discipline: Arsenal
|
||||
tier: 2
|
||||
cost: 7500
|
||||
recipeUnlocks:
|
||||
- WeaponEnergyGunPistol
|
||||
|
||||
- type: technology
|
||||
id: Advanced Laser Manipulation
|
||||
name: research-technology-advance-laser #
|
||||
icon:
|
||||
sprite: _Sunrise/Objects/Weapons/Guns/Battery/energygun_carbine.rsi
|
||||
state: icon
|
||||
discipline: Arsenal
|
||||
tier: 2
|
||||
cost: 12500
|
||||
recipeUnlocks:
|
||||
- WeaponGunLaserCarbineAutomatic
|
||||
|
|
@ -70,6 +70,10 @@
|
|||
<Box>
|
||||
<GuideEntityEmbed Entity="BookSecretDocuments" Caption="Секретные Документы"/>
|
||||
</Box>
|
||||
- Украсть у Главы Службы Безопасноти [color=#a4885c]X-01 Мультифазный энергетический карабин[/color].
|
||||
<Box>
|
||||
<GuideEntityEmbed Entity="BookSecretDocuments" Caption="Секретные Документы"/>
|
||||
</Box>
|
||||
- Украсть у Старшего Инженера [color=#a4885c]Продвинутные Магнитные Сапоги[/color].
|
||||
<Box>
|
||||
<GuideEntityEmbed Entity="ClothingShoesBootsMagAdv" Caption="Продвинутые Магнитные Сапоги"/>
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 513 B |
|
After Width: | Height: | Size: 871 B |
|
After Width: | Height: | Size: 862 B |
|
After Width: | Height: | Size: 515 B |
|
After Width: | Height: | Size: 1,005 B |
|
After Width: | Height: | Size: 956 B |
|
After Width: | Height: | Size: 201 B |
|
After Width: | Height: | Size: 170 B |
|
After Width: | Height: | Size: 175 B |
|
After Width: | Height: | Size: 174 B |
|
After Width: | Height: | Size: 174 B |
|
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tg station at commit https://github.com/tgstation/tgstation/commit/bb9be1ac98073a904c1c404ec5cdd73f40143057",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "base"
|
||||
},
|
||||
{
|
||||
"name": "mode-disabler"
|
||||
},
|
||||
{
|
||||
"name": "mode-lethal"
|
||||
},
|
||||
{
|
||||
"name": "mode-stun"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-0",
|
||||
"delays": [[ 0.3, 0.3 ]]
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-1"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-2"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-3"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-4"
|
||||
},
|
||||
{
|
||||
"name": "disabler-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "disabler-inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "lethal-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "lethal-inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "special-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "special-inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 164 B |
|
After Width: | Height: | Size: 154 B |
|
After Width: | Height: | Size: 165 B |
|
After Width: | Height: | Size: 891 B |
|
After Width: | Height: | Size: 879 B |
|
After Width: | Height: | Size: 551 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 558 B |
|
After Width: | Height: | Size: 546 B |
|
After Width: | Height: | Size: 573 B |
|
After Width: | Height: | Size: 162 B |
|
After Width: | Height: | Size: 169 B |
|
After Width: | Height: | Size: 170 B |
|
After Width: | Height: | Size: 170 B |
|
After Width: | Height: | Size: 163 B |
|
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from paradise station at commit https://github.com/ParadiseSS13/Paradise/pull/15894/commits/199daf90ee25f4285a1a90696d152493abf6ca65",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "base"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-0"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-1"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-2"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-3"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-4"
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-BACKPACK",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-SUITSTORAGE",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 315 B |
|
After Width: | Height: | Size: 555 B |
|
After Width: | Height: | Size: 475 B |
|
After Width: | Height: | Size: 619 B |
|
After Width: | Height: | Size: 551 B |
|
After Width: | Height: | Size: 462 B |
|
After Width: | Height: | Size: 113 B |
|
After Width: | Height: | Size: 111 B |
|
After Width: | Height: | Size: 111 B |
|
After Width: | Height: | Size: 113 B |
|
After Width: | Height: | Size: 113 B |
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from paradise station at commit https://github.com/ParadiseSS13/Paradise/pull/15894/commits/199daf90ee25f4285a1a90696d152493abf6ca65",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "base"
|
||||
},
|
||||
{
|
||||
"name": "mode-disabler"
|
||||
},
|
||||
{
|
||||
"name": "mode-lethal"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-0"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-1"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-2"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-3"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-4"
|
||||
},
|
||||
{
|
||||
"name": "disabler-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "disabler-inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "lethal-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "lethal-inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 113 B |
|
After Width: | Height: | Size: 113 B |
|
After Width: | Height: | Size: 231 B |
|
After Width: | Height: | Size: 567 B |
|
After Width: | Height: | Size: 479 B |
|
After Width: | Height: | Size: 217 B |
|
After Width: | Height: | Size: 404 B |
|
After Width: | Height: | Size: 557 B |
|
After Width: | Height: | Size: 485 B |
|
After Width: | Height: | Size: 158 B |
|
After Width: | Height: | Size: 157 B |
|
After Width: | Height: | Size: 164 B |
|
After Width: | Height: | Size: 164 B |
|
After Width: | Height: | Size: 164 B |
|
|
@ -0,0 +1,69 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from paradise station at commit https://github.com/ParadiseSS13/Paradise/pull/8613/commits/980d452f1c5a2b5ca195118182758f81aab64a2d",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "base"
|
||||
},
|
||||
{
|
||||
"name": "mode-disabler"
|
||||
},
|
||||
{
|
||||
"name": "mode-lethal"
|
||||
},
|
||||
{
|
||||
"name": "mode-stun"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-0"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-1"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-2"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-3"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-4"
|
||||
},
|
||||
{
|
||||
"name": "disabler-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "disabler-inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "lethal-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "lethal-inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "special-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "special-inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-BELT",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 120 B |
|
After Width: | Height: | Size: 120 B |
|
After Width: | Height: | Size: 120 B |
|
After Width: | Height: | Size: 891 B |
|
After Width: | Height: | Size: 879 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 618 B |
|
After Width: | Height: | Size: 625 B |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 618 B |
|
After Width: | Height: | Size: 627 B |
|
After Width: | Height: | Size: 338 B |
|
After Width: | Height: | Size: 177 B |
|
After Width: | Height: | Size: 181 B |
|
After Width: | Height: | Size: 181 B |
|
After Width: | Height: | Size: 176 B |
|
|
@ -0,0 +1,70 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tg station at commit https://github.com/tgstation/tgstation/commit/bb9be1ac98073a904c1c404ec5cdd73f40143057",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "base"
|
||||
},
|
||||
{
|
||||
"name": "mode-disabler"
|
||||
},
|
||||
{
|
||||
"name": "mode-lethal"
|
||||
},
|
||||
{
|
||||
"name": "mode-ion"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-0",
|
||||
"delays": [[ 0.3, 0.3 ]]
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-1"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-2"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-3"
|
||||
},
|
||||
{
|
||||
"name": "mag-unshaded-4"
|
||||
},
|
||||
{
|
||||
"name": "disabler-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "disabler-inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "lethal-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "lethal-inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "special-inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "special-inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-BELT",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 236 B |
|
After Width: | Height: | Size: 226 B |
|
After Width: | Height: | Size: 220 B |
|
After Width: | Height: | Size: 616 B |
|
After Width: | Height: | Size: 627 B |