Chaplain stuff (#98)

* - add: Null rod.

* - add: Only chaplain can use holy weapons.

* - add: Chaplain is cult immune.

* - fix: Fix component granting.

* - add: Only chaplain can use null rod.

* - add: Armaments beacon.

* - add: Chaplain playtime requirement.
This commit is contained in:
Aviu00
2024-02-20 19:28:44 +09:00
committed by GitHub
parent e6b6274874
commit 03fed0caa7
158 changed files with 2342 additions and 14 deletions

View File

@@ -141,19 +141,25 @@ public sealed class InteractionOutlineSystem : EntitySystem
var inRange = false;
if (localPlayer.ControlledEntity != null && !Deleted(entityToClick))
{
inRange = _interactionSystem.InRangeUnobstructed(localPlayer.ControlledEntity.Value, entityToClick.Value);
// WD START
if (_combatMode.IsInCombatMode(localPlayer.ControlledEntity) &&
(_meleeWeapon.TryGetWeapon(localPlayer.ControlledEntity.Value, out _, out var weapon) ||
TryComp(localPlayer.ControlledEntity, out weapon)))
{
inRange = _interactionSystem.InRangeUnobstructed(localPlayer.ControlledEntity.Value,
entityToClick.Value, weapon.Range);
var mousePos = _eyeManager.ScreenToMap(_inputManager.MouseScreenPosition);
var userPos = Transform(localPlayer.ControlledEntity.Value).MapPosition;
if (mousePos.MapId != userPos.MapId || (userPos.Position - mousePos.Position).Length() > weapon.Range)
inRange = false;
} // WD END
}
else
{
inRange = _interactionSystem.InRangeUnobstructed(localPlayer.ControlledEntity.Value, entityToClick.Value);
}
// WD END
}
InteractionOutlineComponent? outline;

View File

@@ -0,0 +1,66 @@
using Content.Client._White.UserInterface.Radial;
using Content.Shared._White.Chaplain;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.Prototypes;
namespace Content.Client._White.Chaplain;
[UsedImplicitly]
public sealed class ArmamentsBeaconBui : BoundUserInterface
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
private SpriteSystem _spriteSystem = default!;
private bool _selected;
private RadialContainer? _armorSelector;
public ArmamentsBeaconBui(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
}
protected override void Open()
{
base.Open();
_spriteSystem = _entityManager.EntitySysManager.GetEntitySystem<SpriteSystem>();
var beacon = _entityManager.GetComponent<ArmamentsBeaconComponent>(Owner);
_armorSelector = new RadialContainer();
_armorSelector.Closed += () =>
{
if (_selected)
return;
SendMessage(new ArmorSelectedEvent(-1));
Close();
};
for (var i = 0; i < beacon.Armor.Count; i++)
{
var armorPrototype = _prototypeManager.Index<EntityPrototype>(beacon.Armor[i]);
var button = _armorSelector.AddButton(armorPrototype.Name,
_spriteSystem.GetPrototypeIcon(armorPrototype).Default);
var index = i;
button.Controller.OnPressed += _ =>
{
_selected = true;
SendMessage(new ArmorSelectedEvent(index));
_armorSelector.Close();
Close();
};
}
_armorSelector.OpenAttachedLocalPlayer();
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
_armorSelector?.Close();
}
}

View File

@@ -0,0 +1,65 @@
using Content.Client._White.UserInterface.Radial;
using Content.Shared._White.Chaplain;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.Prototypes;
namespace Content.Client._White.Chaplain;
[UsedImplicitly]
public sealed class NullRodBui : BoundUserInterface
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
private SpriteSystem _spriteSystem = default!;
private bool _selected;
private RadialContainer? _weaponSelector;
public NullRodBui(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
}
protected override void Open()
{
base.Open();
_spriteSystem = _entityManager.EntitySysManager.GetEntitySystem<SpriteSystem>();
var nullRod = _entityManager.GetComponent<NullRodComponent>(Owner);
_weaponSelector = new RadialContainer();
_weaponSelector.Closed += () =>
{
if (_selected)
return;
SendMessage(new WeaponSelectedEvent(string.Empty));
Close();
};
foreach (var weapon in nullRod.Weapons)
{
var weaponPrototype = _prototypeManager.Index<EntityPrototype>(weapon);
var button = _weaponSelector.AddButton(weaponPrototype.Name,
_spriteSystem.GetPrototypeIcon(weaponPrototype).Default);
button.Controller.OnPressed += _ =>
{
_selected = true;
SendMessage(new WeaponSelectedEvent(weapon));
_weaponSelector.Close();
Close();
};
}
_weaponSelector.OpenAttachedLocalPlayer();
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
_weaponSelector?.Close();
}
}

View File

@@ -0,0 +1,39 @@
using Content.Server.Hands.Systems;
using Content.Server.Popups;
using Content.Shared._White.Chaplain;
using Content.Shared.Ghost;
using Content.Shared.Inventory;
namespace Content.Server._White.Chaplain;
public sealed class ArmamentsBeaconSystem : EntitySystem
{
[Dependency] private readonly InventorySystem _inventorySystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ArmamentsBeaconComponent, ArmorSelectedEvent>(OnArmorSelected);
}
private void OnArmorSelected(Entity<ArmamentsBeaconComponent> ent, ref ArmorSelectedEvent args)
{
var entity = args.Session.AttachedEntity;
var index = args.SelectedIndex;
if (index < 0 || index >= ent.Comp.Armor.Count || entity == null)
return;
_inventorySystem.TryUnequip(entity.Value, "outerClothing", true);
_inventorySystem.SpawnItemInSlot(entity.Value, "outerClothing", ent.Comp.Armor[index], silent: true);
if (index < ent.Comp.Helmets.Count && ent.Comp.Helmets[index] != null)
{
_inventorySystem.TryUnequip(entity.Value, "head", true);
_inventorySystem.SpawnItemInSlot(entity.Value, "head", ent.Comp.Helmets[index]!.Value, silent: true);
}
Del(ent);
}
}

View File

@@ -0,0 +1,40 @@
using Content.Server.Hands.Systems;
using Content.Server.Popups;
using Content.Shared._White.Chaplain;
using Content.Shared.Ghost;
namespace Content.Server._White.Chaplain;
public sealed class NullRodSystem : EntitySystem
{
[Dependency] private readonly HandsSystem _hands = default!;
[Dependency] private readonly PopupSystem _popup = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<NullRodComponent, WeaponSelectedEvent>(OnWeaponSelected);
}
private void OnWeaponSelected(Entity<NullRodComponent> ent, ref WeaponSelectedEvent args)
{
var entity = args.Session.AttachedEntity;
if (args.SelectedWeapon == string.Empty || entity == null)
return;
if (!HasComp<HolyComponent>(entity.Value) && !HasComp<GhostComponent>(entity.Value))
{
_popup.PopupEntity($"Вам не хватает веры, чтобы использовать {Name(ent)}", entity.Value, entity.Value);
return;
}
var weapon = Spawn(args.SelectedWeapon, Transform(entity.Value).Coordinates);
EnsureComp<HolyWeaponComponent>(weapon);
Del(ent);
_hands.PickupOrDrop(entity.Value, weapon, true, false, false);
}
}

View File

@@ -22,6 +22,7 @@ using Robust.Shared.Configuration;
using Robust.Shared.Player;
using Robust.Shared.Random;
using Content.Shared._White;
using Content.Shared._White.Chaplain;
using Content.Shared._White.Cult.Components;
using Content.Shared.Mind;
using Robust.Shared.Audio.Systems;
@@ -327,9 +328,10 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
if (!_jobSystem.CanBeAntag(player))
continue;
// Gulag
// Gulag & chaplain
if (!_mindSystem.TryGetMind(player, out _, out var mind) ||
mind.OwnedEntity is not { } ownedEntity || HasComp<GulagBoundComponent>(ownedEntity))
mind.OwnedEntity is not { } ownedEntity || HasComp<GulagBoundComponent>(ownedEntity) ||
HasComp<HolyComponent>(ownedEntity))
continue;
// Latejoin
@@ -414,7 +416,7 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
if (!_mindSystem.TryGetMind(cultist, out var mindId, out var mind))
{
Log.Info("Failed getting mind for picked thief.");
Log.Info("Failed getting mind for picked cultist.");
return false;
}

View File

@@ -10,6 +10,7 @@ using Content.Server.Hands.Systems;
using Content.Server.Weapons.Ranged.Systems;
using Content.Server._White.Cult.GameRule;
using Content.Server._White.Cult.Runes.Comps;
using Content.Shared._White.Chaplain;
using Content.Shared.Actions;
using Content.Shared.Chemistry.Components.SolutionManager;
using Content.Shared.Cuffs.Components;
@@ -423,7 +424,8 @@ public sealed partial class CultSystem : EntitySystem
var isTarget = mind!.Mind!.Value == targetMind?.Mind!.Value;
// Выполнение действия в зависимости от условий
if (canBeConverted && !HasComp<MindShieldComponent>(victim.Value) && !isTarget)
if (canBeConverted && !HasComp<HolyComponent>(victim.Value) &&
!HasComp<MindShieldComponent>(victim.Value) && !isTarget)
{
result = Convert(uid, victim.Value, args.User, args.Cultists);
}

View File

@@ -1,8 +1,13 @@
using Content.Server.Doors.Systems;
using Content.Shared._White.Chaplain;
using Content.Shared.Doors;
using Content.Shared.Humanoid;
using Content.Shared.Stunnable;
using Content.Shared._White.Cult;
using Content.Shared.Doors.Components;
using Content.Shared.Weapons.Melee.Events;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Physics.Systems;
using CultistComponent = Content.Shared._White.Cult.Components.CultistComponent;
@@ -13,6 +18,7 @@ public sealed class RunicDoorSystem : EntitySystem
[Dependency] private readonly DoorSystem _doorSystem = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly SharedStunSystem _stunSystem = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
public override void Initialize()
{
@@ -20,6 +26,18 @@ public sealed class RunicDoorSystem : EntitySystem
SubscribeLocalEvent<RunicDoorComponent, BeforeDoorOpenedEvent>(OnBeforeDoorOpened);
SubscribeLocalEvent<RunicDoorComponent, BeforeDoorClosedEvent>(OnBeforeDoorClosed);
SubscribeLocalEvent<RunicDoorComponent, AttackedEvent>(OnGetAttacked);
}
private void OnGetAttacked(Entity<RunicDoorComponent> ent, ref AttackedEvent args)
{
if (!HasComp<HolyWeaponComponent>(args.Used) || !TryComp<DoorComponent>(ent, out var doorComp) ||
doorComp.State is not DoorState.Closed)
return;
_audio.PlayPvs(new SoundPathSpecifier("/Audio/Magic/knock.ogg"), ent);
_doorSystem.StartOpening(ent, doorComp);
}
private void OnBeforeDoorOpened(EntityUid uid, RunicDoorComponent component, BeforeDoorOpenedEvent args)
@@ -61,7 +79,7 @@ public sealed class RunicDoorSystem : EntitySystem
_doorSystem.Deny(airlock);
if (!HasComp<HumanoidAppearanceComponent>(user))
if (!HasComp<HumanoidAppearanceComponent>(user) || HasComp<HolyComponent>(user))
return false;
var direction = Transform(user).MapPosition.Position - Transform(airlock).MapPosition.Position;

View File

@@ -0,0 +1,8 @@
namespace Content.Server._White.Other.MeleeBlockSystem;
[RegisterComponent]
public sealed partial class MeleeBlockComponent : Component
{
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float BlockChance = 0.4f;
}

View File

@@ -0,0 +1,37 @@
using Content.Shared.Hands.Components;
using Content.Shared.Popups;
using Content.Shared.Weapons.Melee.Events;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Random;
namespace Content.Server._White.Other.MeleeBlockSystem;
public sealed class MeleeBlockSystem : EntitySystem
{
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<HandsComponent, MeleeBlockAttemptEvent>(OnBlockAttempt);
}
private void OnBlockAttempt(Entity<HandsComponent> ent, ref MeleeBlockAttemptEvent args)
{
if (ent.Owner == args.Attacker ||
!TryComp(ent.Comp.ActiveHandEntity, out MeleeBlockComponent? blockComponent) ||
!_random.Prob(blockComponent.BlockChance))
return;
args.Blocked = true;
_popupSystem.PopupEntity("заблокировал!", ent);
_audio.PlayPvs(new SoundPathSpecifier("/Audio/Weapons/block_metal1.ogg"), ent,
AudioParams.Default.WithVariation(0.25f));
}
}

View File

@@ -0,0 +1,8 @@
namespace Content.Server._White.Other.RandomDamageSystem;
[RegisterComponent]
public sealed partial class RandomDamageComponent : Component
{
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float Max = 50f;
}

View File

@@ -0,0 +1,26 @@
using Content.Shared.Damage;
using Content.Shared.Damage.Prototypes;
using Content.Shared.Weapons.Melee.Events;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Server._White.Other.RandomDamageSystem;
public sealed class RandomDamageSystem : EntitySystem
{
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<RandomDamageComponent, MeleeHitEvent>(HandleHit);
}
private void HandleHit(Entity<RandomDamageComponent> ent, ref MeleeHitEvent args)
{
var damage = _random.NextFloat() * ent.Comp.Max;
args.BonusDamage = new DamageSpecifier(_prototypeManager.Index<DamageTypePrototype>("Slash"), damage);
}
}

View File

@@ -93,3 +93,8 @@ public record struct GetMeleeAttackRateEvent(EntityUid Weapon, float Rate, float
/// </summary>
[ByRefEvent]
public record struct GetHeavyDamageModifierEvent(EntityUid Weapon, FixedPoint2 DamageModifier, float Multipliers, EntityUid User);
// WD START
[ByRefEvent]
public record struct MeleeBlockAttemptEvent(EntityUid Attacker, bool Blocked = false);
// WD END

View File

@@ -60,10 +60,14 @@ public sealed partial class MeleeWeaponComponent : Component
[ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
public bool Attacking = false;
// WD
// WD START
[ViewVariables(VVAccess.ReadWrite), DataField]
public bool CanHeavyAttack = true;
[ViewVariables(VVAccess.ReadWrite), DataField]
public bool IgnoreResistances;
// WD END
/// <summary>
/// If true, attacks will be repeated automatically without requiring the mouse button to be lifted.
/// </summary>

View File

@@ -22,6 +22,7 @@ using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Events;
using Content.Shared.Weapons.Ranged.Systems;
using Content.Shared._White;
using Content.Shared._White.Chaplain;
using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Configuration;
@@ -500,6 +501,13 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem
if (hitEvent.Handled)
return;
// WD START
var blockEvent = new MeleeBlockAttemptEvent(user);
RaiseLocalEvent(target.Value, ref blockEvent);
if (blockEvent.Blocked)
return;
// WD END
var targets = new List<EntityUid>(1)
{
target.Value
@@ -519,7 +527,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem
RaiseLocalEvent(target.Value, attackedEvent);
var modifiedDamage = DamageSpecifier.ApplyModifierSets(damage + hitEvent.BonusDamage + attackedEvent.BonusDamage, hitEvent.ModifiersList);
var damageResult = Damageable.TryChangeDamage(target, modifiedDamage, origin:user);
var damageResult = Damageable.TryChangeDamage(target, modifiedDamage, component.IgnoreResistances, origin:user); // WD EDIT
if (damageResult != null && damageResult.Any())
{
@@ -658,11 +666,18 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem
if (!Blocker.CanAttack(user, entity, (weapon, component)))
continue;
// WD START
var blockEvent = new MeleeBlockAttemptEvent(user);
RaiseLocalEvent(entity, ref blockEvent);
if (blockEvent.Blocked)
continue;
// WD END
var attackedEvent = new AttackedEvent(meleeUid, user, GetCoordinates(ev.Coordinates));
RaiseLocalEvent(entity, attackedEvent);
var modifiedDamage = DamageSpecifier.ApplyModifierSets(damage + hitEvent.BonusDamage + attackedEvent.BonusDamage, hitEvent.ModifiersList);
var damageResult = Damageable.TryChangeDamage(entity, modifiedDamage, origin:user);
var damageResult = Damageable.TryChangeDamage(entity, modifiedDamage, component.IgnoreResistances, origin:user); // WD EDIT
if (damageResult != null && damageResult.GetTotal() > FixedPoint2.Zero)
{

View File

@@ -0,0 +1,13 @@
using Robust.Shared.Prototypes;
namespace Content.Shared._White.Chaplain;
[RegisterComponent]
public sealed partial class ArmamentsBeaconComponent : Component
{
[DataField]
public List<EntProtoId> Armor = new();
[DataField]
public List<EntProtoId?> Helmets = new();
}

View File

@@ -0,0 +1,21 @@
using Robust.Shared.Serialization;
namespace Content.Shared._White.Chaplain;
[Serializable, NetSerializable]
public enum SelectArmorUi
{
Key
}
[Serializable, NetSerializable]
public class ArmorSelectedEvent : BoundUserInterfaceMessage
{
public int SelectedIndex;
public ArmorSelectedEvent(int index)
{
SelectedIndex = index;
}
}

View File

@@ -0,0 +1,8 @@
using Robust.Shared.GameStates;
namespace Content.Shared._White.Chaplain;
[RegisterComponent, NetworkedComponent]
public sealed partial class HolyComponent : Component
{
}

View File

@@ -0,0 +1,8 @@
using Robust.Shared.GameStates;
namespace Content.Shared._White.Chaplain;
[RegisterComponent, NetworkedComponent]
public sealed partial class HolyWeaponComponent : Component
{
}

View File

@@ -0,0 +1,30 @@
using Content.Shared.Examine;
using Content.Shared.Ghost;
using Content.Shared.Weapons.Melee.Events;
namespace Content.Shared._White.Chaplain;
public sealed class HolyWeaponSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<HolyWeaponComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<HolyWeaponComponent, AttemptMeleeEvent>(OnMeleeAttempt);
}
private void OnMeleeAttempt(Entity<HolyWeaponComponent> ent, ref AttemptMeleeEvent args)
{
if (HasComp<HolyComponent>(args.User) || HasComp<GhostComponent>(args.User))
return;
args.Cancelled = true;
args.Message = $"Вам не хватает веры, чтобы использовать {Name(ent)}";
}
private void OnExamined(Entity<HolyWeaponComponent> ent, ref ExaminedEvent args)
{
args.PushMarkup("[color=lightblue]Данное оружие наделено священной силой.[/color]");
}
}

View File

@@ -0,0 +1,10 @@
using Robust.Shared.Prototypes;
namespace Content.Shared._White.Chaplain;
[RegisterComponent]
public sealed partial class NullRodComponent : Component
{
[DataField]
public List<EntProtoId> Weapons = new();
}

View File

@@ -0,0 +1,20 @@
using Robust.Shared.Serialization;
namespace Content.Shared._White.Chaplain;
[Serializable, NetSerializable]
public enum SelectWeaponUi
{
Key
}
[Serializable, NetSerializable]
public class WeaponSelectedEvent : BoundUserInterfaceMessage
{
public string SelectedWeapon;
public WeaponSelectedEvent(string weapon)
{
SelectedWeapon = weapon;
}
}

Binary file not shown.

View File

@@ -47,6 +47,10 @@
maxVol: 300
- type: UseDelay
delay: 1
- type: Tool
qualities:
- Sawing
speed: 0.5
- type: Construction
deconstructionTarget: null
graph: ChainsawGraph

View File

@@ -46,11 +46,11 @@
wideAnimationRotation: -135
damage:
types:
Slash: 20
Slash: 24
soundHit:
path: /Audio/Weapons/bladeslice.ogg
- type: Item
size: Large
size: Huge
sprite: Objects/Weapons/Melee/katana.rsi
- type: DisarmMalus
@@ -69,7 +69,7 @@
types:
Slash: 30
- type: Item
size: Large
size: Huge
sprite: Objects/Weapons/Melee/energykatana.rsi
- type: EnergyKatana
- type: DashAbility

View File

@@ -3,6 +3,9 @@
name: job-name-chaplain
description: job-description-chaplain
playTimeTracker: JobChaplain
requirements:
- !type:OverallPlaytimeRequirement
time: 18000 #5 hrs
startingGear: ChaplainGear
icon: "JobIconChaplain"
supervisors: job-supervisors-hop
@@ -13,6 +16,7 @@
- !type:AddComponentSpecial
components:
- type: BibleUser #Lets them heal with bibles
- type: Holy
- type: startingGear
id: ChaplainGear
@@ -23,9 +27,12 @@
shoes: ClothingShoesColorBlack
id: ChaplainPDA
ears: ClothingHeadsetService
pocket1: ArmamentsBeacon
underwearb: ClothingUnderwearBottomBoxersWhite # White-Underwear
underweart: ClothingUnderwearTopBraWhite # White-Underwear
underwearb: ClothingUnderwearBottomPantiesWhite # White-Underwear
inhand:
- NullRod
innerClothingSkirt: ClothingUniformJumpskirtChaplain
satchel: ClothingBackpackSatchelChaplainFilled
duffelbag: ClothingBackpackDuffelChaplainFilled

View File

@@ -0,0 +1,79 @@
- type: entity
parent: ClothingHeadBase
id: ClothingHeadHelmedTemplarArmored
name: шлем крестоносца
description: Деус Вульт!
components:
- type: Sprite
sprite: White/Clothing/Head/templar.rsi
- type: Clothing
sprite: White/Clothing/Head/templar.rsi
- type: Armor
modifiers:
coefficients:
Blunt: 0.8
Slash: 0.8
Piercing: 0.95
- type: Tag
tags:
- HidesHair
- WhitelistChameleon
- type: entity
parent: ClothingHeadHelmedTemplarArmored
id: ClothingHeadHelmetClock
name: забытый шлем
description: У него непреклонный взгляд навечно забытого бога.
components:
- type: Sprite
sprite: White/Clothing/Head/clock.rsi
- type: Clothing
sprite: White/Clothing/Head/clock.rsi
- type: entity
parent: ClothingHeadHelmedTemplarArmored
id: ClothingHeadHelmetCage
name: клетка
description: Клетка, сдерживающая желания личности, позволяющая увидеть нечестивый мир таким, какой он есть.
components:
- type: Sprite
sprite: White/Clothing/Head/cage.rsi
- type: Clothing
sprite: White/Clothing/Head/cage-equipped.rsi
- type: Tag
tags:
- WhitelistChameleon
- type: entity
parent: ClothingHeadHelmedTemplarArmored
id: ClothingHeadHelmetAncientChaplain
name: древний шлем
description: Никто не может пройти!
components:
- type: Sprite
sprite: White/Clothing/Head/ancient.rsi
- type: Clothing
sprite: White/Clothing/Head/ancient.rsi
- type: entity
parent: ClothingHeadHelmetCage
id: ClothingHeadHelmetWitchHunter
name: шляпа Охотника на Ведьм
description: Эта изношенная шляпа часто применялась в свое время.
components:
- type: Sprite
sprite: White/Clothing/Head/witchhunter.rsi
- type: Clothing
sprite: White/Clothing/Head/witchhunter.rsi
- type: entity
parent: ClothingHeadHelmedTemplarArmored
id: ClothingHeadHelmetAdept
noSpawn: true
name: капюшон адепта
description: Еретично только тогда, когда это делают другие.
components:
- type: Sprite
sprite: White/Clothing/Head/adept.rsi
- type: Clothing
sprite: White/Clothing/Head/adept.rsi

View File

@@ -0,0 +1,77 @@
- type: entity
parent: ClothingOuterBaseLarge
id: ClothingOuterArmorTemplar
name: доспехи крестоносца
description: Бог желает этого!
components:
- type: Sprite
sprite: White/Clothing/OuterClothing/templar.rsi
- type: Clothing
sprite: White/Clothing/OuterClothing/templar.rsi
- type: Armor
modifiers:
coefficients:
Blunt: 0.4
Slash: 0.4
Piercing: 0.9
Heat: 0.5
- type: ClothingSpeedModifier
walkModifier: 1.0
sprintModifier: 1.0
- type: entity
parent: ClothingOuterArmorTemplar
id: ClothingOuterArmorClock
name: забытая броня
description: Звучит как шипение пара, тиканье шестерёнок и затихание. Похоже на мёртвую машину, пытающуюся жить.
components:
- type: Sprite
sprite: White/Clothing/OuterClothing/clock.rsi
- type: Clothing
sprite: White/Clothing/OuterClothing/clock.rsi
- type: entity
parent: ClothingOuterArmorTemplar
id: ClothingOuterArmorStudent
name: студенческая мантия
description: Униформа древнего учебного заведения.
components:
- type: Sprite
sprite: White/Clothing/OuterClothing/student.rsi
- type: Clothing
sprite: White/Clothing/OuterClothing/student.rsi
- type: entity
parent: ClothingOuterArmorTemplar
id: ClothingOuterArmorAncient
name: древний доспех
description: Защити сокровище...
components:
- type: Sprite
sprite: White/Clothing/OuterClothing/ancient.rsi
- type: Clothing
sprite: White/Clothing/OuterClothing/ancient.rsi
- type: entity
parent: ClothingOuterArmorTemplar
id: ClothingOuterArmorWitchHunter
name: одеяние Охотника на Ведьм
description: Это изношенное одеяние часто применялось в свое время.
components:
- type: Sprite
sprite: White/Clothing/OuterClothing/witchhunter.rsi
- type: Clothing
sprite: White/Clothing/OuterClothing/witchhunter.rsi
- type: entity
parent: ClothingOuterArmorTemplar
id: ClothingOuterArmorAdept
name: мантия адепта
description: Идеальный наряд для сжигания неверных.
components:
- type: Sprite
sprite: White/Clothing/OuterClothing/adept.rsi
- type: Clothing
sprite: White/Clothing/OuterClothing/adept.rsi
- type: ToggleableClothing
clothingPrototype: ClothingHeadHelmetAdept

View File

@@ -0,0 +1,39 @@
- type: entity
parent: BaseItem
id: ArmamentsBeacon
name: радиомаяк вооружения
description: Содержит набор вооружения для священника.
components:
- type: Sprite
sprite: Objects/Devices/door_remote.rsi
layers:
- state: door_remotebase
- state: door_remotelightscolour
color: lightblue
- state: door_remotescreencolour
color: lightblue
- type: Item
storedRotation: -90
- type: ActivatableUI
key: enum.SelectArmorUi.Key
inHandsOnly: true
closeOnHandDeselect: true
- type: UserInterface
interfaces:
- key: enum.SelectArmorUi.Key
type: ArmamentsBeaconBui
- type: ArmamentsBeacon
armor:
- ClothingOuterArmorTemplar
- ClothingOuterArmorClock
- ClothingOuterArmorStudent
- ClothingOuterArmorAncient
- ClothingOuterArmorWitchHunter
- ClothingOuterArmorAdept
helmets:
- ClothingHeadHelmedTemplarArmored
- ClothingHeadHelmetClock
- ClothingHeadHelmetCage
- ClothingHeadHelmetAncientChaplain
- ClothingHeadHelmetWitchHunter
- null

View File

@@ -0,0 +1,449 @@
- type: entity
name: жезл нулификации
parent: BaseItem
id: NullRod
description: Жезл из чистого обсидиана. Само его присутствие разрушает и ослабляет "магические силы". Во всяком случае так написано в путеводителе.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/nullrod.rsi
state: icon
- type: MeleeWeapon
damage:
types:
Blunt: 18
- type: Item
size: Normal
sprite: White/Objects/Weapons/Chaplain/nullrod.rsi
- type: Clothing
quickEquip: false
sprite: White/Objects/Weapons/Chaplain/nullrod.rsi
slots:
- belt
- type: ActivatableUI
key: enum.SelectWeaponUi.Key
inHandsOnly: true
closeOnHandDeselect: true
- type: UserInterface
interfaces:
- key: enum.SelectWeaponUi.Key
type: NullRodBui
- type: NullRod
weapons:
- GodHand
- HolyClaymore
- Chainsword
- SwordGlowing
- HolyKatana
- MultiverseBlade
- VorpalScythe
- HighFrequencyBlade
- SpellBlade
- PossessedBlade
- ChainsawHand
- HolyWhip
- HolyStaff
- UnholyPitchfork
- WarHammer
- HyperTool
- type: HolyWeapon
- type: entity
name: божья длань
parent: BaseItem
id: GodHand
description: Эта рука сияет с потрясающей силой!
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/godhand.rsi
state: icon
- type: MeleeWeapon
soundHit:
path: /Audio/Weapons/Guns/Hits/energy_meat1.ogg
params:
variation: 0.250
volume: -10
wideAnimationRotation: 180
damage:
types:
Heat: 24
- type: Item
size: Normal
sprite: White/Objects/Weapons/Chaplain/godhand.rsi
- type: Unremoveable
deleteOnDrop: true
- type: entity
name: священный клеймор
parent: Claymore
id: HolyClaymore
description: Оружие, подходящее для крестового похода!
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/claymore.rsi
- type: MeleeWeapon
damage:
types:
Slash: 33
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/claymore.rsi
slots:
- back
- belt
- type: Item
sprite: White/Objects/Weapons/Chaplain/claymore.rsi
- type: entity
name: цепной меч
parent: HolyClaymore
id: Chainsword
description: Не позволь еретику жить.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
- type: MeleeWeapon
soundHit:
path: /Audio/Weapons/chainsaw.ogg
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
- type: Item
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
- type: Tool
qualities:
- Sawing
speed: 0.5
- type: entity
name: силовой меч
parent: HolyClaymore
id: SwordGlowing
description: Клинок светится силой веры. Или, возможно, благодаря аккумулятору.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/forceweapon.rsi
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/forceweapon.rsi
- type: PointLight
radius: 4
energy: 2
color: lightblue
- type: Item
sprite: White/Objects/Weapons/Chaplain/forceweapon.rsi
- type: entity
name: лезвие ханзо
parent: Katana
id: HolyKatana
description: Способен прорезать святой клеймор.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/katana.rsi
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/katana.rsi
slots:
- back
- belt
- type: Item
sprite: White/Objects/Weapons/Chaplain/katana.rsi
- type: entity
name: внепространственный клинок
parent: HolyKatana
id: MultiverseBlade
description: Будучи когда-то предвестником межпространственной войны, его острота сильно колеблется. Наносит от 1 до 50 урона.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/multiverse.rsi
- type: MeleeWeapon
damage:
types:
Slash: 1
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/multiverse.rsi
slots:
- back
- type: Item
sprite: White/Objects/Weapons/Chaplain/multiverse.rsi
- type: RandomDamage
- type: entity
name: коса жнеца
parent: HolyClaymore
id: VorpalScythe
description: И жрец, и жнец, и на дуде игрец! Коса способна пробить броню противника.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/scythe.rsi
- type: MeleeWeapon
ignoreResistances: true
damage:
types:
Slash: 27
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/scythe.rsi
slots:
- back
- type: Item
sprite: White/Objects/Weapons/Chaplain/scythe-inhands.rsi
- type: entity
name: высокочастотный клинок
parent: HolyKatana
id: HighFrequencyBlade
description: Клинок, способный отражать выстрелы.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi
- type: MeleeWeapon
damage:
types:
Slash: 18
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi
slots:
- back
- type: Reflect
reflectProb: 0.4
- type: Item
sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi
- type: entity
name: клинок заклинаний
parent: HolyKatana
id: SpellBlade
description: Клинок, с шансом 20% наносящий критический удар.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/spellblade.rsi
- type: MeleeWeapon
wideAnimationRotation: 135
damage:
types:
Slash: 18
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/spellblade.rsi
slots:
- back
- type: Crit
critChance: 20
critMultiplier: 2.5
- type: Item
sprite: White/Objects/Weapons/Chaplain/spellblade.rsi
- type: entity
name: одержимый клинок
parent: HolyKatana
id: PossessedBlade
description: Когда на станции царит хаос, приятно иметь рядом друга.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/possessed.rsi
- type: MeleeWeapon
wideAnimationRotation: -45
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/possessed.rsi
slots:
- back
- type: GhostRole
allowSpeech: true
name: Одержимый Клинок
description: Вы - одержимый клинок. Подчиняйтесь своему владельцу.
- type: GhostTakeoverAvailable
- type: Examiner
- type: Item
sprite: White/Objects/Weapons/Chaplain/possessed.rsi
- type: entity
name: рука-бензопила
parent: BaseItem
id: ChainsawHand
description: Добро? Зло? Ты парень с бензопилой в руке.
components:
- type: Sharp
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/chainsaw.rsi
state: icon
- type: MeleeWeapon
autoAttack: true
angle: 0
wideAnimationRotation: 90
attackRate: 4
damage:
types:
Slash: 6
soundHit:
path: /Audio/Weapons/chainsaw.ogg
params:
volume: -3
- type: Item
size: Huge
sprite: White/Objects/Weapons/Chaplain/chainsaw.rsi
- type: Unremoveable
deleteOnDrop: true
- type: Tool
qualities:
- Sawing
speed: 0.5
- type: entity
name: священная плеть
parent: BaseItem
id: HolyWhip
description: Какая ужасная ночь на космической станции 14.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/whip.rsi
state: icon
- type: MeleeWeapon
soundHit:
path: /Audio/White/Items/hit/chainhit.ogg
range: 2.5
damage:
types:
Blunt: 15
- type: Item
size: Normal
sprite: White/Objects/Weapons/Chaplain/whip.rsi
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/whip.rsi
slots:
- belt
- type: DisarmMalus
- type: entity
name: посох монаха
parent: BaseItem
id: HolyStaff
description: Длинный высокий посох из полированного дерева. Традиционно используемый в боевых искусствах древней Земли, теперь он используется для преследования клоуна.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/staff.rsi
state: icon
- type: MeleeWeapon
wideAnimationRotation: 135
damage:
types:
Blunt: 10
- type: Item
size: Huge
sprite: White/Objects/Weapons/Chaplain/staff.rsi
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/staff.rsi
slots:
- back
- type: Wieldable
- type: IncreaseDamageOnWield
damage:
types:
Blunt: 10
- type: UseDelay
- type: DisarmMalus
- type: MeleeBlock
- type: entity
name: нечестивые вилы
parent: BaseItem
id: UnholyPitchfork
description: Держа это, ты выглядишь абсолютно по дьявольски.
components:
- type: EmbeddableProjectile
offset: 0.15,0.15
- type: ThrowingAngle
angle: 225
- type: Fixtures
fixtures:
fix1:
shape: !type:PolygonShape
vertices:
- -0.20,-0.10
- -0.10,-0.20
- 0.40,0.30
- 0.30,0.40
density: 20
mask:
- ItemMask
restitution: 0.3
friction: 0.2
- type: Sharp
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
state: icon
- type: MeleeWeapon
wideAnimationRotation: -135
damage:
types:
Piercing: 15
angle: 0
animation: WeaponArcThrust
soundHit:
path: /Audio/Weapons/bladeslice.ogg
range: 2
- type: DamageOtherOnHit
damage:
types:
Piercing: 25
- type: Item
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
size: Huge
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
slots:
- back
- type: Wieldable
- type: IncreaseDamageOnWield
damage:
types:
Piercing: 10
- type: UseDelay
- type: DisarmMalus
- type: entity
name: реликтовый боевой молот
parent: BaseItem
id: WarHammer
description: Этот боевой молот обошелся священнику в сорок тысяч кредитов.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/hammer.rsi
state: icon
- type: MeleeWeapon
wideAnimationRotation: -135
attackRate: 0.75
damage:
types:
Blunt: 24
Structural: 80
- type: Item
size: Huge
sprite: White/Objects/Weapons/Chaplain/hammer.rsi
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/hammer.rsi
slots:
- belt
- type: DisarmMalus
- type: entity
name: гиперинструмент
parent: BaseItem
id: HyperTool
description: Инструмент настолько мощный, что даже вы не можете им идеально пользоваться.
components:
- type: Sprite
sprite: White/Objects/Weapons/Chaplain/hypertool.rsi
state: icon
- type: MeleeWeapon
wideAnimationRotation: -135
attackRate: 0.75
canHeavyAttack: false
damage:
types:
Blunt: 0
- type: StaminaDamageOnHit
damage: 60
- type: Item
size: Normal
sprite: White/Objects/Weapons/Chaplain/hypertool.rsi
- type: Clothing
sprite: White/Objects/Weapons/Chaplain/hypertool.rsi
slots:
- belt
- type: DisarmMalus

Binary file not shown.

After

Width:  |  Height:  |  Size: 758 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-HELMET",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-HELMET",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 742 B

View File

@@ -0,0 +1,14 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 64,
"y": 64
},
"states": [
{
"name": "equipped-HELMET"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

View File

@@ -0,0 +1,14 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 786 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-HELMET",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-HELMET",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-HELMET",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-OUTERCLOTHING",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-OUTERCLOTHING",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-OUTERCLOTHING",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-OUTERCLOTHING",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-OUTERCLOTHING",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-OUTERCLOTHING",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 721 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 B

View File

@@ -0,0 +1,28 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon",
"delays": [
[
0.04,
0.04
]
]
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1021 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 B

View File

@@ -0,0 +1,86 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/c9ddcd603adeab3822c2845f6be9dfb53452c119",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon",
"delays": [
[
0.01,
0.01
]
]
},
{
"name": "inhand-right",
"directions": 4,
"delays": [
[
0.1,
0.1
],
[
0.1,
0.1
],
[
0.1,
0.1
],
[
0.1,
0.1
]
]
},
{
"name": "inhand-left",
"directions": 4,
"delays": [
[
0.1,
0.1
],
[
0.1,
0.1
],
[
0.1,
0.1
],
[
0.1,
0.1
]
]
},
{
"name": "equipped-BELT",
"directions": 4,
"delays": [
[
0.1,
0.1
],
[
0.1,
0.1
],
[
0.1,
0.1
],
[
0.1,
0.1
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

View File

@@ -0,0 +1,30 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "equipped-BELT",
"directions": 4
},
{
"name": "equipped-BACKPACK",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 B

View File

@@ -0,0 +1,36 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/c9ddcd603adeab3822c2845f6be9dfb53452c119",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon",
"delays": [
[
0.01,
0.01
]
]
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "equipped-BELT",
"directions": 4
},
{
"name": "equipped-BACKPACK",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 845 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

View File

@@ -0,0 +1,66 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "inhand-left",
"directions": 4,
"delays": [
[
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1
]
]
},
{
"name": "inhand-right",
"directions": 4,
"delays": [
[
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 716 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 B

View File

@@ -0,0 +1,26 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/d0dffe7ca643db2624424fdcebf45863f85c0448",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "equipped-BELT",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Some files were not shown because too many files have changed in this diff Show More