Compare commits
10 Commits
3d46894cb4
...
5e294dcecc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e294dcecc | ||
|
|
8d4888b726 | ||
|
|
fb55064420 | ||
|
|
91f5138a61 | ||
|
|
b080ce7133 | ||
|
|
dd1ba4cd95 | ||
|
|
905fc6a783 | ||
|
|
922e397f34 | ||
|
|
de947988fe | ||
|
|
00ba4595a8 |
@@ -35,6 +35,7 @@ public sealed partial class GameTicker
|
||||
|
||||
private bool StartPreset(ICommonSession[] origReadyPlayers, bool force)
|
||||
{
|
||||
_sawmill.Info($"Attempting to start preset '{CurrentPreset?.ID}'");
|
||||
var startAttempt = new RoundStartAttemptEvent(origReadyPlayers, force);
|
||||
RaiseLocalEvent(startAttempt);
|
||||
|
||||
@@ -56,9 +57,12 @@ public sealed partial class GameTicker
|
||||
var fallbackPresets = _cfg.GetCVar(CCVars.GameLobbyFallbackPreset).Split(",");
|
||||
var startFailed = true;
|
||||
|
||||
_sawmill.Info($"Fallback - Failed to start round, attempting to start fallback presets.");
|
||||
foreach (var preset in fallbackPresets)
|
||||
{
|
||||
_sawmill.Info($"Fallback - Clearing up gamerules");
|
||||
ClearGameRules();
|
||||
_sawmill.Info($"Fallback - Attempting to start '{preset}'");
|
||||
SetGamePreset(preset, resetDelay: 1);
|
||||
AddGamePresetRules();
|
||||
StartGamePresetRules();
|
||||
@@ -76,6 +80,7 @@ public sealed partial class GameTicker
|
||||
startFailed = false;
|
||||
break;
|
||||
}
|
||||
_sawmill.Info($"Fallback - '{preset}' failed to start.");
|
||||
}
|
||||
|
||||
if (startFailed)
|
||||
@@ -87,6 +92,7 @@ public sealed partial class GameTicker
|
||||
|
||||
else
|
||||
{
|
||||
_sawmill.Info($"Fallback - Failed to start preset but fallbacks are disabled. Returning to Lobby.");
|
||||
FailedPresetRestart();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -38,6 +38,8 @@ public abstract partial class GameRuleSystem<T> : EntitySystem where T : ICompon
|
||||
while (query.MoveNext(out var uid, out _, out var gameRule))
|
||||
{
|
||||
var minPlayers = gameRule.MinPlayers;
|
||||
var name = ToPrettyString(uid);
|
||||
|
||||
if (args.Players.Length >= minPlayers)
|
||||
continue;
|
||||
|
||||
@@ -46,8 +48,10 @@ public abstract partial class GameRuleSystem<T> : EntitySystem where T : ICompon
|
||||
ChatManager.SendAdminAnnouncement(Loc.GetString("preset-not-enough-ready-players",
|
||||
("readyPlayersCount", args.Players.Length),
|
||||
("minimumPlayers", minPlayers),
|
||||
("presetName", ToPrettyString(uid))));
|
||||
("presetName", name)));
|
||||
args.Cancel();
|
||||
//TODO remove this once announcements are logged
|
||||
Log.Info($"Rule '{name}' requires {minPlayers} players, but only {args.Players.Length} are ready.");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -93,7 +93,7 @@ public sealed class XenoborgsRuleSystem : GameRuleSystem<XenoborgsRuleComponent>
|
||||
var numXenoborgs = GetNumberXenoborgs();
|
||||
var numHumans = _mindSystem.GetAliveHumans().Count;
|
||||
|
||||
if ((float)numXenoborgs / numHumans > xenoborgsRuleComponent.XenoborgShuttleCallPercentage)
|
||||
if ((float)numXenoborgs / (numHumans + numXenoborgs) > xenoborgsRuleComponent.XenoborgShuttleCallPercentage)
|
||||
{
|
||||
foreach (var station in _station.GetStations())
|
||||
{
|
||||
|
||||
@@ -801,7 +801,11 @@ public sealed partial class ShuttleSystem
|
||||
while (iteration < FTLProximityIterations)
|
||||
{
|
||||
grids.Clear();
|
||||
_mapManager.FindGridsIntersecting(mapId, targetAABB, ref grids);
|
||||
// We pass in an expanded offset here so we can safely do a random offset later.
|
||||
// We don't include this in the actual targetAABB because then we would be double-expanding it.
|
||||
// Once in this loop, then again when placing the shuttle later.
|
||||
// Note that targetAABB already has expansionAmount factored in already.
|
||||
_mapManager.FindGridsIntersecting(mapId, targetAABB.Enlarged(maxOffset), ref grids);
|
||||
|
||||
foreach (var grid in grids)
|
||||
{
|
||||
@@ -834,10 +838,6 @@ public sealed partial class ShuttleSystem
|
||||
if (nearbyGrids.Contains(uid))
|
||||
continue;
|
||||
|
||||
// We pass in an expanded offset here so we can safely do a random offset later.
|
||||
// We don't include this in the actual targetAABB because then we would be double-expanding it.
|
||||
// Once in this loop, then again when placing the shuttle later.
|
||||
// Note that targetAABB already has expansionAmount factored in already.
|
||||
targetAABB = targetAABB.Union(
|
||||
_transform.GetWorldMatrix(uid)
|
||||
.TransformBox(Comp<MapGridComponent>(uid).LocalAABB.Enlarged(expansionAmount)));
|
||||
@@ -857,7 +857,7 @@ public sealed partial class ShuttleSystem
|
||||
|
||||
// TODO: This should prefer the position's angle instead.
|
||||
// TODO: This is pretty crude for multiple landings.
|
||||
if (nearbyGrids.Count >= 1)
|
||||
if (nearbyGrids.Count > 1 || !HasComp<MapComponent>(targetXform.GridUid))
|
||||
{
|
||||
// Pick a random angle
|
||||
var offsetAngle = _random.NextAngle();
|
||||
@@ -866,9 +866,13 @@ public sealed partial class ShuttleSystem
|
||||
var minRadius = MathF.Max(targetAABB.Width / 2f, targetAABB.Height / 2f);
|
||||
spawnPos = targetAABB.Center + offsetAngle.RotateVec(new Vector2(_random.NextFloat(minRadius + minOffset, minRadius + maxOffset), 0f));
|
||||
}
|
||||
else if (shuttleBody != null)
|
||||
{
|
||||
(spawnPos, angle) = _transform.GetWorldPositionRotation(targetXform);
|
||||
}
|
||||
else
|
||||
{
|
||||
spawnPos = _transform.ToWorldPosition(targetCoordinates);
|
||||
spawnPos = _transform.GetWorldPosition(targetXform);
|
||||
}
|
||||
|
||||
var offset = Vector2.Zero;
|
||||
@@ -889,10 +893,10 @@ public sealed partial class ShuttleSystem
|
||||
}
|
||||
|
||||
// Rotate our localcenter around so we spawn exactly where we "think" we should (center of grid on the dot).
|
||||
var transform = new Transform(_transform.ToWorldPosition(xform.Coordinates), angle);
|
||||
var adjustedOffset = Robust.Shared.Physics.Transform.Mul(transform, offset);
|
||||
var transform = new Transform(spawnPos, angle);
|
||||
spawnPos = Robust.Shared.Physics.Transform.Mul(transform, offset);
|
||||
|
||||
coordinates = new EntityCoordinates(targetXform.MapUid.Value, spawnPos + adjustedOffset);
|
||||
coordinates = new EntityCoordinates(targetXform.MapUid.Value, spawnPos - offset);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,4 @@
|
||||
Entries:
|
||||
- author: AreYouConfused
|
||||
changes:
|
||||
- message: Bulldog bundle now accurately says what is included
|
||||
type: Fix
|
||||
id: 8712
|
||||
time: '2025-06-24T21:58:58.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/38558
|
||||
- author: Dragonjspider
|
||||
changes:
|
||||
- message: The Cutter Machine no longer makes Dark Techmaints floor tiles for free
|
||||
@@ -3925,3 +3918,11 @@
|
||||
id: 9212
|
||||
time: '2025-11-19T02:58:33.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/41487
|
||||
- author: korczoczek
|
||||
changes:
|
||||
- message: Packed's evac shuttle will no longer have its air chamber glass break
|
||||
upon loading
|
||||
type: Fix
|
||||
id: 9213
|
||||
time: '2025-11-19T22:15:26.0000000+00:00'
|
||||
url: https://github.com/space-wizards/space-station-14/pull/41500
|
||||
|
||||
@@ -37,3 +37,13 @@
|
||||
cost: 2500
|
||||
category: cargoproduct-category-name-cargo
|
||||
group: market
|
||||
|
||||
- type: cargoProduct
|
||||
id: CargoMailCart
|
||||
icon:
|
||||
sprite: Objects/Specific/Cargo/mailcart.rsi
|
||||
state: icon
|
||||
product: MailCart
|
||||
cost: 300
|
||||
category: cargoproduct-category-name-cargo
|
||||
group: market
|
||||
|
||||
@@ -102,6 +102,9 @@
|
||||
containers:
|
||||
delivery: !type:NestedSelector
|
||||
tableId: PackageDeliveryRewards
|
||||
- type: Tag
|
||||
tags:
|
||||
- PackageDelivery
|
||||
|
||||
- type: entity
|
||||
parent: BaseDelivery
|
||||
|
||||
@@ -533,7 +533,6 @@
|
||||
parent: BeachBall
|
||||
id: EvilBeachBall
|
||||
suffix: evil
|
||||
name: beach ball
|
||||
description: Someone's drawn ">:3c" on the side of this beach ball in indelible ink.
|
||||
components:
|
||||
- type: LaunchOnTrigger
|
||||
|
||||
@@ -4,9 +4,6 @@
|
||||
categories: [ HideSpawnMenu ]
|
||||
parent: BaseBullet
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
state: buckshot
|
||||
- type: Projectile
|
||||
deleteOnCollide: false
|
||||
damage:
|
||||
@@ -23,9 +20,6 @@
|
||||
categories: [ HideSpawnMenu ]
|
||||
parent: BaseBullet
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
state: buckshot
|
||||
- type: Projectile
|
||||
deleteOnCollide: false
|
||||
damage:
|
||||
@@ -40,9 +34,6 @@
|
||||
categories: [ HideSpawnMenu ]
|
||||
parent: BaseBulletIncendiary
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
state: buckshot-flare
|
||||
- type: Projectile
|
||||
deleteOnCollide: false
|
||||
damage:
|
||||
@@ -61,9 +52,6 @@
|
||||
categories: [ HideSpawnMenu ]
|
||||
parent: BaseBullet
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
state: buckshot
|
||||
- type: Projectile
|
||||
deleteOnCollide: false
|
||||
damage:
|
||||
|
||||
@@ -22,7 +22,9 @@
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
state: buckshot
|
||||
layers:
|
||||
- state: bullet #just reapplying to here so it can be shaded
|
||||
|
||||
- type: Projectile
|
||||
damage:
|
||||
types:
|
||||
@@ -36,9 +38,6 @@
|
||||
categories: [ HideSpawnMenu ]
|
||||
parent: BaseBullet
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
state: buckshot
|
||||
- type: Projectile
|
||||
damage:
|
||||
types:
|
||||
@@ -62,9 +61,6 @@
|
||||
categories: [ HideSpawnMenu ]
|
||||
parent: BaseBulletIncendiary
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
state: buckshot-flare
|
||||
- type: Projectile
|
||||
damage:
|
||||
types:
|
||||
@@ -89,9 +85,6 @@
|
||||
categories: [ HideSpawnMenu ]
|
||||
parent: BaseBulletPractice
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
state: buckshot
|
||||
- type: Projectile
|
||||
damage:
|
||||
types:
|
||||
@@ -115,7 +108,9 @@
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
state: shard
|
||||
layers:
|
||||
- state: shard
|
||||
shader: unshaded
|
||||
- type: Projectile
|
||||
damage:
|
||||
types:
|
||||
@@ -138,9 +133,6 @@
|
||||
categories: [ HideSpawnMenu ]
|
||||
parent: BaseBulletPractice
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
state: buckshot
|
||||
- type: Projectile
|
||||
damage:
|
||||
types:
|
||||
@@ -204,13 +196,8 @@
|
||||
id: PelletShotgunUranium
|
||||
name: pellet (.50 uranium)
|
||||
categories: [ HideSpawnMenu ]
|
||||
parent: BaseBullet
|
||||
parent: BaseBulletUranium
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
layers:
|
||||
- state: uranium
|
||||
shader: unshaded
|
||||
- type: Projectile
|
||||
damage:
|
||||
types:
|
||||
@@ -266,7 +253,6 @@
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
layers:
|
||||
- state: shard
|
||||
shader: unshaded
|
||||
- type: EmbeddableProjectile
|
||||
deleteOnRemove: true
|
||||
- type: Projectile
|
||||
|
||||
@@ -178,6 +178,11 @@
|
||||
sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
|
||||
layers:
|
||||
- state: uranium
|
||||
shader: unshaded
|
||||
# - type: PointLight // Too resource intensive for what little effect it has, one day...
|
||||
# enabled: true
|
||||
# color: "#059919"
|
||||
# radius: 2.0
|
||||
- type: Projectile
|
||||
damage:
|
||||
types:
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
# Mailcart
|
||||
- type: entity
|
||||
name: mail cart
|
||||
id: MailCart
|
||||
parent: [BaseStructureDynamic, StructureWheeled]
|
||||
description: Deliver packages with style and efficiency.
|
||||
components:
|
||||
- type: Sprite
|
||||
noRot: true
|
||||
sprite: Objects/Specific/Cargo/mailcart.rsi
|
||||
layers:
|
||||
- state: mailcart_base
|
||||
- type: InteractionOutline
|
||||
- type: Storage
|
||||
grid:
|
||||
- 0,0,15,7
|
||||
quickInsert: true
|
||||
maxItemSize: Huge
|
||||
whitelist:
|
||||
components:
|
||||
- Delivery
|
||||
tags:
|
||||
- Paper
|
||||
- Document
|
||||
- BoxCardboard
|
||||
- Folder
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape:
|
||||
!type:PhysShapeAabb
|
||||
bounds: "-0.18,-0.2,0.18,0.2"
|
||||
density: 60
|
||||
mask:
|
||||
- FullTileMask
|
||||
layer:
|
||||
- LargeMobLayer
|
||||
- type: Damageable
|
||||
damageContainer: Inorganic
|
||||
damageModifierSet: Metallic
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger: !type:DamageTrigger
|
||||
damage: 400
|
||||
behaviors:
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
- trigger: !type:DamageTrigger
|
||||
damage: 200
|
||||
behaviors:
|
||||
- !type:EmptyAllContainersBehaviour
|
||||
- !type:DoActsBehavior
|
||||
acts: ["Destruction"]
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: MetalBreak
|
||||
- type: ItemMapper
|
||||
mapLayers:
|
||||
package_1:
|
||||
minCount: 1
|
||||
whitelist: &PackageWhitelist
|
||||
tags:
|
||||
- PackageDelivery
|
||||
package_2:
|
||||
minCount: 2
|
||||
whitelist: *PackageWhitelist
|
||||
package_3:
|
||||
minCount: 3
|
||||
whitelist: *PackageWhitelist
|
||||
package_4:
|
||||
minCount: 4
|
||||
whitelist: *PackageWhitelist
|
||||
package_5:
|
||||
minCount: 5
|
||||
whitelist: *PackageWhitelist
|
||||
package_6:
|
||||
minCount: 6
|
||||
whitelist: *PackageWhitelist
|
||||
package_7:
|
||||
minCount: 7
|
||||
whitelist: *PackageWhitelist
|
||||
package_8:
|
||||
minCount: 8
|
||||
whitelist: *PackageWhitelist
|
||||
sprite: Objects/Specific/Cargo/mailcart.rsi
|
||||
- type: Appearance
|
||||
- type: UserInterface
|
||||
interfaces:
|
||||
enum.StorageUiKey.Key:
|
||||
type: StorageBoundUserInterface
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
storagebase: !type:Container
|
||||
ents: []
|
||||
@@ -159,7 +159,7 @@
|
||||
id: Bottle # Storage whitelist: ChemMaster, ChemBag, SmartFridge, ClothingBeltJanitor, ClothingBeltMedical, ClothingBeltPlant
|
||||
|
||||
- type: Tag
|
||||
id: BoxCardboard # CargoBounty: BountyCardboardBox
|
||||
id: BoxCardboard # CargoBounty: BountyCardboardBox. Storage whitelist: MailCart
|
||||
|
||||
- type: Tag
|
||||
id: BoxHug # ConstructionGraph: HugBot
|
||||
@@ -465,7 +465,7 @@
|
||||
id: DockEmergency # Used bv EmergencyShuttleSystem for finding a priority FTL destination.
|
||||
|
||||
- type: Tag
|
||||
id: Document # A superset of Paper tag. Represents a paper-like entity with writing on it, but is not necessarily writeable itself.
|
||||
id: Document # A superset of Paper tag. Represents a paper-like entity with writing on it, but is not necessarily writeable itself. Storage whitelist: MailCart
|
||||
|
||||
- type: Tag
|
||||
id: DonkPocket # Storage whitelist: FoodBoxDonkpocket
|
||||
@@ -581,7 +581,7 @@
|
||||
id: Flower # CargoBounty: flowerwreath. CargoBounty: BountyFlower
|
||||
|
||||
- type: Tag
|
||||
id: Folder # Storage whitelist: Bookshelf, NoticeBoard
|
||||
id: Folder # Storage whitelist: Bookshelf, NoticeBoard, MailCart
|
||||
|
||||
- type: Tag
|
||||
id: FoodSnack # Storage whitelist: CandyBucket, CandyBowl. ItemMapper: CandyBowl
|
||||
@@ -1024,6 +1024,9 @@
|
||||
|
||||
## P ##
|
||||
|
||||
- type: Tag
|
||||
id: PackageDelivery # ItemMapper: MailCart
|
||||
|
||||
- type: Tag
|
||||
id: Packet # Storage whitelist: ClothingBeltChef
|
||||
|
||||
@@ -1031,7 +1034,7 @@
|
||||
id: Pancake # CargoBounty: BountyPancake
|
||||
|
||||
- type: Tag
|
||||
id: Paper # A writeable piece of paper. Subset of Document tag. SpecialDigestible: OrganMothStomach, OrganReptilianStomach
|
||||
id: Paper # A writeable piece of paper. Subset of Document tag. SpecialDigestible: OrganMothStomach, OrganReptilianStomach. Storage whitelist: MailCart
|
||||
|
||||
- type: Tag
|
||||
id: ParadoxCloneObjectiveBlacklist # objective entities with this tag don't get copied to paradox clones
|
||||
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 950 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/40d89d11ea4a5cb81d61dc1018b46f4e7d32c62a. equipped-HELMET-dog modified from equipped-HELMET by Sparlight (GitHub), vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "equipped-HELMET",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-HELMET-dog",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "equipped-HELMET-vulpkanin",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -17,8 +17,8 @@
|
||||
"name": "ai_face",
|
||||
"delays": [
|
||||
[
|
||||
2.3,
|
||||
0.2
|
||||
0.2,
|
||||
2.3
|
||||
]
|
||||
]
|
||||
},
|
||||
|
||||
BIN
Resources/Textures/Objects/Specific/Cargo/mailcart.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 959 B |
|
After Width: | Height: | Size: 959 B |
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Mailcart_base sprite made by noahrb (Github) for SS14; Package_1 through Package_8 sprites made by Emisse (Github) for SS14... and all the fans.",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "mailcart_base"
|
||||
},
|
||||
{
|
||||
"name": "package_1"
|
||||
},
|
||||
{
|
||||
"name": "package_2"
|
||||
},
|
||||
{
|
||||
"name": "package_3"
|
||||
},
|
||||
{
|
||||
"name": "package_4"
|
||||
},
|
||||
{
|
||||
"name": "package_5"
|
||||
},
|
||||
{
|
||||
"name": "package_6"
|
||||
},
|
||||
{
|
||||
"name": "package_7"
|
||||
},
|
||||
{
|
||||
"name": "package_8"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 137 B |
|
After Width: | Height: | Size: 137 B |
|
After Width: | Height: | Size: 136 B |
|
After Width: | Height: | Size: 134 B |
|
After Width: | Height: | Size: 170 B |
|
After Width: | Height: | Size: 171 B |
|
After Width: | Height: | Size: 169 B |
|
After Width: | Height: | Size: 170 B |