Всякое по мелочи (#148)

* fix: у мартышек снова отображается одежда

* fix: с зеркалом снова можно взаимодействовать

* tweak: шлюзы культа теперь работают как двери, а не шлюзы

* remove: убрано отображение текущего патрона у револьверов

* add: новые плитки для мапперов
This commit is contained in:
Remuchi
2024-03-01 15:51:17 +07:00
committed by GitHub
parent 95589e29c1
commit 9430e2d53c
41 changed files with 284 additions and 276 deletions

View File

@@ -102,13 +102,8 @@ public sealed class ClientClothingSystem : ClothingSystem
// if that returned nothing, attempt to find generic data
if (layers == null && !item.ClothingVisuals.TryGetValue(args.Slot, out layers))
{
if (!TryComp(args.Equipee, out HumanoidAppearanceComponent? humanoid))
{
return;
}
// No generic data either. Attempt to generate defaults from the item's RSI & item-prefixes
if (!TryGetDefaultVisuals(uid, item, args.Slot, inventory.SpeciesId, humanoid, out layers))
if (!TryGetDefaultVisuals(uid, item, args.Slot, inventory.SpeciesId, args.Equipee, out layers))
return;
}
@@ -139,7 +134,7 @@ public sealed class ClientClothingSystem : ClothingSystem
ClothingComponent clothing,
string slot,
string? speciesId,
HumanoidAppearanceComponent humanoid,
EntityUid? target,
[NotNullWhen(true)] out List<PrototypeLayerData>? layers)
{
layers = null;
@@ -166,10 +161,13 @@ public sealed class ClientClothingSystem : ClothingSystem
state = $"{clothing.EquippedState}";
// body type specific
var bodyTypeProto = _prototypeManager.Index<BodyTypePrototype>(humanoid.BodyType);
if (rsi.TryGetState($"{state}-{bodyTypeProto.Name}", out _))
if (TryComp(target, out HumanoidAppearanceComponent? humanoid))
{
state = $"{state}-{bodyTypeProto.Name}";
var bodyTypeProto = _prototypeManager.Index<BodyTypePrototype>(humanoid.BodyType);
if (rsi.TryGetState($"{state}-{bodyTypeProto.Name}", out _))
{
state = $"{state}-{bodyTypeProto.Name}";
}
}
// species specific
@@ -389,4 +387,4 @@ public sealed class ClientClothingSystem : ClothingSystem
sprite.LayerSetVisible(layer, true);
}
}
}

View File

@@ -434,7 +434,7 @@ public sealed partial class GunSystem
}));
}
public void Update(int currentIndex, bool?[] bullets)
public void Update(bool?[] bullets)
{
_bulletsList.RemoveAllChildren();
var capacity = bullets.Length;
@@ -456,10 +456,10 @@ public sealed partial class GunSystem
var texture = StaticIoC.ResC.GetTexture(texturePath);
var spentTexture = StaticIoC.ResC.GetTexture("/Textures/Interface/ItemStatus/Bullets/empty.png");
FillBulletRow(currentIndex, bullets, _bulletsList, texture, spentTexture);
FillBulletRow(bullets, _bulletsList, texture, spentTexture);
}
private void FillBulletRow(int currentIndex, bool?[] bullets, Control container, Texture texture, Texture emptyTexture)
private void FillBulletRow(bool?[] bullets, Control container, Texture texture, Texture emptyTexture)
{
var capacity = bullets.Length;
var colorA = Color.FromHex("#b68f0e");
@@ -467,7 +467,6 @@ public sealed partial class GunSystem
var colorSpentA = Color.FromHex("#b50e25");
var colorSpentB = Color.FromHex("#d3745f");
var colorGoneA = Color.FromHex("#000000");
var colorGoneB = Color.FromHex("#222222");
var altColor = false;
var scale = 1.3f;
@@ -480,15 +479,6 @@ public sealed partial class GunSystem
{
MinSize = texture.Size * scale,
};
if (i == currentIndex)
{
box.AddChild(new TextureRect
{
Texture = texture,
TextureScale = new Vector2(scale, scale),
ModulateSelfOverride = Color.LimeGreen,
});
}
Color color;
Texture bulletTexture = texture;
@@ -506,7 +496,7 @@ public sealed partial class GunSystem
}
else
{
color = altColor ? colorGoneA : colorGoneB;
color = colorGoneA;
}
box.AddChild(new TextureRect

View File

@@ -29,7 +29,7 @@ public sealed partial class GunSystem
private void OnRevolverAmmoUpdate(EntityUid uid, RevolverAmmoProviderComponent component, UpdateAmmoCounterEvent args)
{
if (args.Control is not RevolverStatusControl control) return;
control.Update(component.CurrentIndex, component.Chambers);
control.Update(component.Chambers);
}
private void OnRevolverCounter(EntityUid uid, RevolverAmmoProviderComponent component, AmmoCounterControlEvent args)

View File

@@ -39,6 +39,7 @@ public sealed class MagicMirrorSystem : EntitySystem
subs.Event<MagicMirrorRemoveSlotMessage>(OnTryMagicMirrorRemoveSlot);
});
SubscribeLocalEvent<MagicMirrorComponent, InteractHandEvent>(OnMagicMirrorInWorldInteract);
SubscribeLocalEvent<MagicMirrorComponent, AfterInteractEvent>(OnMagicMirrorInteract);
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorSelectDoAfterEvent>(OnSelectSlotDoAfter);
@@ -49,9 +50,19 @@ public sealed class MagicMirrorSystem : EntitySystem
SubscribeLocalEvent<MagicMirrorComponent, BoundUserInterfaceCheckRangeEvent>(OnMirrorRangeCheck);
}
private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, ref BoundUserInterfaceCheckRangeEvent args)
private void OnMagicMirrorInWorldInteract(Entity<MagicMirrorComponent> mirror, ref InteractHandEvent args)
{
if (!Exists(component.Target) || !_interaction.InRangeUnobstructed(uid, component.Target.Value))
UpdateInterface(mirror.Owner, args.User, mirror.Comp);
}
private void OnMirrorRangeCheck(
EntityUid uid,
MagicMirrorComponent component,
ref BoundUserInterfaceCheckRangeEvent args)
{
component.Target ??= args.Player.AttachedEntity;
if (!component.Target.HasValue || !_interaction.InRangeUnobstructed(uid, component.Target!.Value))
{
args.Result = BoundUserInterfaceRangeResult.Fail;
}
@@ -92,16 +103,17 @@ public sealed class MagicMirrorSystem : EntitySystem
Marking = message.Marking,
};
_doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.SelectSlotTime, doAfter, uid, target: target, used: uid)
{
DistanceThreshold = SharedInteractionSystem.InteractionRange,
BreakOnTargetMove = true,
BreakOnDamage = true,
BreakOnHandChange = false,
BreakOnUserMove = true,
BreakOnWeightlessMove = false,
NeedHand = true
}, out var doAfterId);
_doAfterSystem.TryStartDoAfter(
new DoAfterArgs(EntityManager, user, component.SelectSlotTime, doAfter, uid, target: target, used: uid)
{
DistanceThreshold = SharedInteractionSystem.InteractionRange,
BreakOnTargetMove = true,
BreakOnDamage = true,
BreakOnHandChange = false,
BreakOnUserMove = true,
BreakOnWeightlessMove = false,
NeedHand = true
}, out var doAfterId);
component.DoAfter = doAfterId;
_audio.PlayPvs(component.ChangeHairSound, uid);
@@ -134,7 +146,10 @@ public sealed class MagicMirrorSystem : EntitySystem
UpdateInterface(uid, component.Target.Value, component);
}
private void OnTryMagicMirrorChangeColor(EntityUid uid, MagicMirrorComponent component, MagicMirrorChangeColorMessage message)
private void OnTryMagicMirrorChangeColor(
EntityUid uid,
MagicMirrorComponent component,
MagicMirrorChangeColorMessage message)
{
if (component.Target is not { } target || message.Session.AttachedEntity is not { } user)
return;
@@ -149,19 +164,24 @@ public sealed class MagicMirrorSystem : EntitySystem
Colors = message.Colors,
};
_doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.ChangeSlotTime, doAfter, uid, target: target, used: uid)
{
BreakOnTargetMove = true,
BreakOnDamage = true,
BreakOnHandChange = false,
BreakOnUserMove = true,
BreakOnWeightlessMove = false,
NeedHand = true
}, out var doAfterId);
_doAfterSystem.TryStartDoAfter(
new DoAfterArgs(EntityManager, user, component.ChangeSlotTime, doAfter, uid, target: target, used: uid)
{
BreakOnTargetMove = true,
BreakOnDamage = true,
BreakOnHandChange = false,
BreakOnUserMove = true,
BreakOnWeightlessMove = false,
NeedHand = true
}, out var doAfterId);
component.DoAfter = doAfterId;
}
private void OnChangeColorDoAfter(EntityUid uid, MagicMirrorComponent component, MagicMirrorChangeColorDoAfterEvent args)
private void OnChangeColorDoAfter(
EntityUid uid,
MagicMirrorComponent component,
MagicMirrorChangeColorDoAfterEvent args)
{
if (args.Handled || args.Target == null || args.Cancelled)
return;
@@ -189,7 +209,10 @@ public sealed class MagicMirrorSystem : EntitySystem
// UpdateInterface(uid, component.Target, message.Session);
}
private void OnTryMagicMirrorRemoveSlot(EntityUid uid, MagicMirrorComponent component, MagicMirrorRemoveSlotMessage message)
private void OnTryMagicMirrorRemoveSlot(
EntityUid uid,
MagicMirrorComponent component,
MagicMirrorRemoveSlotMessage message)
{
if (component.Target is not { } target || message.Session.AttachedEntity is not { } user)
return;
@@ -203,22 +226,26 @@ public sealed class MagicMirrorSystem : EntitySystem
Slot = message.Slot,
};
_doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.RemoveSlotTime, doAfter, uid, target: target, used: uid)
{
DistanceThreshold = SharedInteractionSystem.InteractionRange,
BreakOnTargetMove = true,
BreakOnDamage = true,
BreakOnHandChange = false,
BreakOnUserMove = true,
BreakOnWeightlessMove = false,
NeedHand = true
}, out var doAfterId);
_doAfterSystem.TryStartDoAfter(
new DoAfterArgs(EntityManager, user, component.RemoveSlotTime, doAfter, uid, target: target, used: uid)
{
DistanceThreshold = SharedInteractionSystem.InteractionRange,
BreakOnTargetMove = true,
BreakOnDamage = true,
BreakOnHandChange = false,
BreakOnUserMove = true,
BreakOnWeightlessMove = false,
NeedHand = true
}, out var doAfterId);
component.DoAfter = doAfterId;
_audio.PlayPvs(component.ChangeHairSound, uid);
}
private void OnRemoveSlotDoAfter(EntityUid uid, MagicMirrorComponent component, MagicMirrorRemoveSlotDoAfterEvent args)
private void OnRemoveSlotDoAfter(
EntityUid uid,
MagicMirrorComponent component,
MagicMirrorRemoveSlotDoAfterEvent args)
{
if (args.Handled || args.Target == null || args.Cancelled)
return;
@@ -245,7 +272,10 @@ public sealed class MagicMirrorSystem : EntitySystem
UpdateInterface(uid, component.Target.Value, component);
}
private void OnTryMagicMirrorAddSlot(EntityUid uid, MagicMirrorComponent component, MagicMirrorAddSlotMessage message)
private void OnTryMagicMirrorAddSlot(
EntityUid uid,
MagicMirrorComponent component,
MagicMirrorAddSlotMessage message)
{
if (component.Target == null)
return;
@@ -261,7 +291,8 @@ public sealed class MagicMirrorSystem : EntitySystem
Category = message.Category,
};
_doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Session.AttachedEntity.Value, component.AddSlotTime, doAfter, uid, target: component.Target.Value, used: uid)
_doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Session.AttachedEntity.Value,
component.AddSlotTime, doAfter, uid, target: component.Target.Value, used: uid)
{
BreakOnTargetMove = true,
BreakOnDamage = true,
@@ -274,9 +305,11 @@ public sealed class MagicMirrorSystem : EntitySystem
component.DoAfter = doAfterId;
_audio.PlayPvs(component.ChangeHairSound, uid);
}
private void OnAddSlotDoAfter(EntityUid uid, MagicMirrorComponent component, MagicMirrorAddSlotDoAfterEvent args)
{
if (args.Handled || args.Target == null || args.Cancelled || !TryComp(component.Target, out HumanoidAppearanceComponent? humanoid))
if (args.Handled || args.Target == null || args.Cancelled ||
!TryComp(component.Target, out HumanoidAppearanceComponent? humanoid))
return;
MarkingCategories category;
@@ -301,7 +334,6 @@ public sealed class MagicMirrorSystem : EntitySystem
_humanoid.AddMarking(component.Target.Value, marking, Color.Black);
UpdateInterface(uid, component.Target.Value, component);
}
private void UpdateInterface(EntityUid mirrorUid, EntityUid targetUid, MagicMirrorComponent component)
@@ -332,4 +364,4 @@ public sealed class MagicMirrorSystem : EntitySystem
{
ent.Comp.Target = null;
}
}
}

View File

@@ -0,0 +1,11 @@
tiles-dark-floor-pavement-alt = тёмное стальное покрытие (альтернативное)
tiles-dark-floor-pavement-vertical-alt = тёмное стальное вертикальное покрытие (альтернативное)
tiles-dark-floor-herringbone-alt = тёмное стальное покрытие мозаикой (альтернативное)
tiles-steel-floor-pavement-alt = стальное покрытие (альтернативное)
tiles-steel-floor-pavement-vertical-alt = стальное вертикальное покрытие (альтернативное)
tiles-steel-floor-herringbone-alt = стальное покрытие мозаикой (альтернативное)
tiles-white-floor-pavement-alt = белое стальное покрытие (альтернативное)
tiles-white-floor-pavement-vertical-alt = белое стальное вертикальное покрытие (альтернативное)
tiles-white-floor-herringbone-alt = белое стальное покрытие мозаикой (альтернативное)

View File

@@ -35,8 +35,8 @@ gun-chamber-bolt-closed = Затвор закрыт
gun-chamber-bolt-opened = Затвор открыт
gun-chamber-bolt-close = Закрыть завтор
gun-chamber-bolt-open = Открыть затвор
gun-chamber-bolt-closed-state = закрыт
gun-chamber-bolt-open-state = открыт
gun-chamber-bolt-closed-state = открыт
gun-chamber-bolt-open-state = закрыт
gun-chamber-rack = Разрядить
# MagazineAmmoProvider

View File

@@ -3,18 +3,19 @@
name: mirror
description: 'Mirror mirror on the wall , who''s the most robust of them all?'
components:
- type: WallMount
- type: Sprite
sprite: Structures/Wallmounts/mirror.rsi
state: mirror
- type: InteractionOutline
- type: Clickable
- type: Transform
anchored: true
- type: MagicMirror
- type: ActivatableUI
key: enum.MagicMirrorUiKey.Key
- type: UserInterface
interfaces:
- key: enum.MagicMirrorUiKey.Key
type: MagicMirrorBoundUserInterface
- type: WallMount
- type: Sprite
sprite: Structures/Wallmounts/mirror.rsi
state: mirror
- type: InteractionOutline
- type: Clickable
- type: Transform
anchored: true
- type: MagicMirror
- type: ActivatableUI
key: enum.MagicMirrorUiKey.Key
singleUser: true
- type: UserInterface
interfaces:
- key: enum.MagicMirrorUiKey.Key
type: MagicMirrorBoundUserInterface

View File

@@ -0,0 +1,162 @@
- type: tile
id: FloorDarkPavementAlt
name: tiles-dark-floor-pavement-alt
sprite: /Textures/White/Tiles/dark_pavement.png
variants: 4
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
deconstructTools: [ Prying ]
footstepSounds:
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
- type: tile
id: FloorDarkPavementVerticalAlt
name: tiles-dark-floor-pavement-vertical-alt
sprite: /Textures/White/Tiles/dark_pavement_vertical.png
variants: 4
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
deconstructTools: [ Prying ]
footstepSounds:
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
- type: tile
id: FloorDarkHerringboneAlt
name: tiles-dark-floor-herringbone-alt
sprite: /Textures/White/Tiles/dark_herringbone.png
variants: 4
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
deconstructTools: [ Prying ]
footstepSounds:
collection: FootstepTile
itemDrop: FloorTileItemDark
heatCapacity: 10000
- type: tile
id: FloorSteelHerringboneAlt
name: tiles-steel-floor-herringbone-alt
sprite: /Textures/White/Tiles/steel_herringbone.png
variants: 4
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
deconstructTools: [ Prying ]
footstepSounds:
collection: FootstepTile
itemDrop: FloorTileItemSteel
heatCapacity: 10000
- type: tile
id: FloorSteelPavementAlt
name: tiles-steel-floor-pavement-alt
sprite: /Textures/White/Tiles/steel_pavement.png
variants: 4
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
deconstructTools: [ Prying ]
footstepSounds:
collection: FootstepFloor
itemDrop: FloorTileItemSteel
heatCapacity: 10000
- type: tile
id: FloorSteelPavementVerticalAlt
name: tiles-steel-floor-pavement-vertical-alt
sprite: /Textures/White/Tiles/steel_pavement_vertical.png
variants: 4
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
deconstructTools: [ Prying ]
footstepSounds:
collection: FootstepTile
itemDrop: FloorTileItemSteel
heatCapacity: 10000
- type: tile
id: FloorWhiteHerringboneAlt
name: tiles-white-floor-herringbone-alt
sprite: /Textures/White/Tiles/white_herringbone.png
variants: 4
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
deconstructTools: [ Prying ]
footstepSounds:
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
- type: tile
id: FloorWhitePavementAlt
name: tiles-white-floor-pavement-alt
sprite: /Textures/White/Tiles/white_pavement.png
variants: 4
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
deconstructTools: [ Prying ]
footstepSounds:
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000
- type: tile
id: FloorWhitePavementVerticalAlt
name: tiles-white-floor-pavement-vertical-alt
sprite: /Textures/White/Tiles/white_pavement_vertical.png
variants: 4
placementVariants:
- 1.0
- 1.0
- 1.0
- 1.0
baseTurf: Plating
isSubfloor: false
deconstructTools: [ Prying ]
footstepSounds:
collection: FootstepTile
itemDrop: FloorTileItemWhite
heatCapacity: 10000

View File

@@ -1,6 +1,6 @@
- type: entity
id: AirlockGlassCult
parent: BaseStructure
parent: BaseMaterialDoor
name: runic airlock
description: Strange glass airlock with a rune.
components:
@@ -8,65 +8,32 @@
soundGroups:
Brute:
collection: GlassSmash
- type: InteractionOutline
- type: Sprite
sprite: /Textures/White/Cult/Structures/cult_airlock.rsi
layers:
- state: closed
map: ["enum.DoorVisualLayers.Base"]
- state: closed_unlit
shader: unshaded
map: ["enum.DoorVisualLayers.BaseUnlit"]
- state: welded
map: ["enum.WeldableLayers.BaseWelded"]
visible: false
- state: bolted_unlit
shader: unshaded
map: ["enum.DoorVisualLayers.BaseBolted"]
- state: emergency_unlit
map: ["enum.DoorVisualLayers.BaseEmergencyAccess"]
shader: unshaded
- state: panel_closed
map: ["enum.WiresVisualLayers.MaintenancePanel"]
visible: false
- type: AnimationPlayer
- type: Physics
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.49,-0.49,0.49,0.49" # don't want this colliding with walls or they won't close
density: 100
mask:
- FullTileMask
layer:
- GlassAirlockLayer
bodyType: Static
- type: Occluder
enabled: false
- type: Door
occludes: false
bumpOpen: true
crushDamage:
types:
Blunt: 15
openSound:
path: /Audio/Machines/airlock_open.ogg
path: /Audio/Effects/stonedoor_openclose.ogg
closeSound:
path: /Audio/Machines/airlock_close.ogg
path: /Audio/Effects/stonedoor_openclose.ogg
denySound:
path: /Audio/Machines/airlock_deny.ogg
- type: Airlock
openUnlitVisible: true
- type: DoorBolt
- type: Appearance
- type: Airtight
fixVacuum: true
noAirWhenFullyAirBlocked: false
- type: RadiationBlocker
resistance: 2
- type: Occluder
enabled: false
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Metallic
- type: Destructible
thresholds:
- trigger:
@@ -76,8 +43,6 @@
- !type:DoActsBehavior
acts: ["Destruction"]
- type: RunicDoor
- type: ApcPowerReceiver
needsPower: false
- type: Construction
graph: AirlockGlassCult
node: airlock

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 946 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 B

View File

@@ -41,157 +41,6 @@
},
{
"name": "assembly"
},
{
"name": "bolted_unlit"
},
{
"name": "welded"
},
{
"name": "closing_unlit",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "deny_unlit",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "emergency_unlit",
"delays": [
[
1.2,
1.2
]
]
},
{
"name": "opening_unlit",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "panel_closed"
},
{
"name": "panel_open"
},
{
"name": "panel_opening",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "panel_closing",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "sparks",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "sparks_damaged",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
1.7
]
]
},
{
"name": "sparks_open",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "sparks_broken",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "bolted_open_unlit"
},
{
"name": "closed_unlit"
},
{
"name": "emergency_open_unlit"
},
{
"name": "open_unlit"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 617 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 507 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B