10 Commits

Author SHA1 Message Date
slarticodefast
5e294dcecc Revert 39040 FTL Fixes (#41540)
Revert "FTL Fixes (#39040)"

This reverts commit 52a9f9b576.
2025-11-23 05:14:12 -08:00
Errant
8d4888b726 HOTFIX Add logging to gamepreset fallback (#41522)
* Add logging to gamepreset fallback

* cleanup
2025-11-21 23:48:00 +01:00
ThatGuyUSA
fb55064420 Munitions visibility tweaking and cleanup (#41137)
* I didn't make an init commit, 1: because i forgot, 2: because the PR is so tiny, the whole thing is done already

* beans and shards no glow, clean up

* commented out PointLight, does too little for how straining it would be

* Improvised shells now use shards as their bullet sprite, they still don't embed though
2025-11-20 05:07:01 +00:00
Noah Beverly
91f5138a61 Mail Cart (#41482)
* Add mailcart crate type

* Add recent progress, move location of mailcart.rsi

* Allow letters and packages to be inserted

* Add updated sprites for mailcart

* Add storage for letters

* Bugfix for sprite

* Add fix for mincount mailcart sprite updates

* Add dynamic names to packages in mailcart

* Add additional whitelist items

* Update tag comments

* Remove max item size

* Update fixture for mailcart, remove unused code from crates.yml

* Add mail cart to cargo ordering

* Update meta.json

* Remove unused comment

* Update copyright

* Add missing ContainerContainer

* Update ContainerContainer

* Revert "Update ContainerContainer"

This reverts commit 1805dcd58d8c0f52baca9db0d3173940ee241159.

* Remove container slots and increase storage

* Remove unused tags

* Remove LetterDelivery tag

---------

Co-authored-by: Justin Pfeifler <jrpl101998@gmail.com>
2025-11-20 04:18:19 +00:00
PJBot
b080ce7133 Automatic changelog update 2025-11-19 22:16:34 +00:00
korczoczek
dd1ba4cd95 Make the crimson evac shuttle's air chamber not borderline blow up (#41500)
glass and plasma together strong
2025-11-19 22:03:09 +00:00
lzk
905fc6a783 cleanup evil beach ball (#41499) 2025-11-19 20:44:36 +00:00
korczoczek
922e397f34 Fix blinking animation of disembodied head hologram (#41498)
start blinking normal
2025-11-19 20:34:54 +00:00
Samuka
de947988fe Fix the round end trigger for xenoborgs (#41467)
math
2025-11-19 08:56:43 +00:00
Tiniest Shark
00ba4595a8 Remove Basic Hardsuit Helmet Sprites (#41490)
* Deletes basic helmet

* you forgot one file

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2025-11-19 08:40:38 +00:00
33 changed files with 2880 additions and 2748 deletions

View File

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

View File

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

View File

@@ -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())
{

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -102,6 +102,9 @@
containers:
delivery: !type:NestedSelector
tableId: PackageDeliveryRewards
- type: Tag
tags:
- PackageDelivery
- type: entity
parent: BaseDelivery

View File

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

View File

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

View File

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

View File

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

View File

@@ -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: []

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 950 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

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

View File

@@ -17,8 +17,8 @@
"name": "ai_face",
"delays": [
[
2.3,
0.2
0.2,
2.3
]
]
},

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B