Продвинутое энергетическое оружие (#59)

* added advanced energy gun (AEG)

* added traitor objective targeting HoS' new gun

* fixed formatting

* added research tech unlocking energy weaponry

* me stupid
This commit is contained in:
pacable 2024-06-12 12:58:17 +03:00 committed by GitHub
parent ce27d25bac
commit 4fd33aa375
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
98 changed files with 1001 additions and 2 deletions

View 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;
}

View 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);
}
}

View 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
}

View file

@ -0,0 +1 @@
energygun-examine-fire-mode = The firemode is set to {$mode}

View file

@ -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

View file

@ -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 }

View 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 = обезоруживание

View file

@ -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 = Военное энергетическое вооружение

View file

@ -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 }

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View 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

View 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

View file

@ -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="Продвинутые Магнитные Сапоги"/>

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 515 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,005 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

View file

@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 879 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 B

View file

@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

View file

@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 557 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

View file

@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 879 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

View file

@ -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
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B