From 4ff39d4974bc096e1d01380a163dd8feb6376e41 Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Sat, 9 Nov 2024 18:03:37 +0200 Subject: [PATCH 01/45] Update Changelogs (#2382) * Update Frontier.yml * changelog suggestions * Fix PlantMutateExudeGases and PlantMutateConsume --------- Co-authored-by: Whatstone --- .../EntityEffects/Effects/PlantMutateGases.cs | 24 +++++++++++++++---- Resources/Changelog/Frontier.yml | 11 ++++----- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Content.Server/EntityEffects/Effects/PlantMutateGases.cs b/Content.Server/EntityEffects/Effects/PlantMutateGases.cs index 92889a926d0..7b81a5078fc 100644 --- a/Content.Server/EntityEffects/Effects/PlantMutateGases.cs +++ b/Content.Server/EntityEffects/Effects/PlantMutateGases.cs @@ -25,12 +25,28 @@ public override void Effect(EntityEffectBaseArgs args) if (plantholder.Seed == null) return; + // Frontier: List of gasses + Gas[] gasList = + { + Gas.Oxygen, + Gas.Nitrogen, + Gas.CarbonDioxide, + Gas.NitrousOxide, + Gas.Ammonia, + Gas.Plasma, + Gas.WaterVapor, + //Gas.Tritium, + //Gas.Frezon, + }; + // End Frontier: List of gasses + var random = IoCManager.Resolve(); var gasses = plantholder.Seed.ExudeGasses; // Add a random amount of a random gas to this gas dictionary float amount = random.NextFloat(MinValue, MaxValue); - Gas gas = random.Pick(Enum.GetValues(typeof(Gas)).Cast().ToList()); + //Gas gas = random.Pick(Enum.GetValues(typeof(Gas)).Cast().ToList()); // Frontier + Gas gas = random.Pick(gasList); // Frontier if (gasses.ContainsKey(gas)) { gasses[gas] += amount; @@ -65,7 +81,7 @@ public override void Effect(EntityEffectBaseArgs args) return; // Frontier: List of gasses - Gas[] GassesList = + Gas[] gasList = { Gas.Oxygen, Gas.Nitrogen, @@ -77,7 +93,7 @@ public override void Effect(EntityEffectBaseArgs args) //Gas.Tritium, //Gas.Frezon, }; - // Frontier: List of gasses + // End Frontier: List of gasses var random = IoCManager.Resolve(); var gasses = plantholder.Seed.ConsumeGasses; @@ -85,7 +101,7 @@ public override void Effect(EntityEffectBaseArgs args) // Add a random amount of a random gas to this gas dictionary float amount = random.NextFloat(MinValue, MaxValue); //Gas gas = random.Pick(Enum.GetValues(typeof(Gas)).Cast().ToList()); // Frontier - Gas gas = random.Pick(GassesList); // Frontier + Gas gas = random.Pick(gasList); // Frontier if (gasses.ContainsKey(gas)) { gasses[gas] += amount; diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 5a8f07a9aac..e540f9399d6 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -3274,7 +3274,7 @@ Entries: when taking or leaving a ghost role. type: Tweak - message: >- - When entering cryo, your respawn timer is reduced (default 30 seconds). + When entering cryo, your respawn timer is reduced (default 30 seconds). If you re-enter, you will receive a longer timer. type: Tweak id: 5242 @@ -5109,13 +5109,12 @@ Entries: changes: - type: Add message: >- - New massive dungeon asteroids were added, keep an eye out for them on - radar and be informed about them on supply radio, be prepared for a - fight. + Added new massive dungeon asteroids - they last 30 minutes, spawn every 35-40 minutes, + and are announced on Supply radio. - type: Tweak message: >- - The cooldown on expedition FTL has been extended, you will now need to - wait longer to depart on another mission. + The cooldown on expedition FTL has been extended to 20 minutes, you will now need to + wait a bit longer to depart on another mission. - type: Remove message: Space dungeons (the big orange platforms) no longer spawn. id: 5478 From b6a22d1c42b29f577d74e10fabdc92cae7441b04 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Sat, 9 Nov 2024 16:04:02 +0000 Subject: [PATCH 02/45] Automatic Changelog (#2382) --- Resources/Changelog/Frontier.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index e540f9399d6..65635ff8d6a 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5109,12 +5109,12 @@ Entries: changes: - type: Add message: >- - Added new massive dungeon asteroids - they last 30 minutes, spawn every 35-40 minutes, - and are announced on Supply radio. + Added new massive dungeon asteroids - they last 30 minutes, spawn every + 35-40 minutes, and are announced on Supply radio. - type: Tweak message: >- - The cooldown on expedition FTL has been extended to 20 minutes, you will now need to - wait a bit longer to depart on another mission. + The cooldown on expedition FTL has been extended to 20 minutes, you will + now need to wait a bit longer to depart on another mission. - type: Remove message: Space dungeons (the big orange platforms) no longer spawn. id: 5478 @@ -5187,3 +5187,9 @@ Entries: message: The golden mask is no longer cursed. id: 5487 time: '2024-11-09T01:33:02.0000000+00:00' +- author: dvir001 + changes: + - type: Remove + message: Removed Tritium and Frezon gas exude and consume mutations from botany. + id: 5488 + time: '2024-11-09T16:03:37.0000000+00:00' From 8454df4bc4a9300cfd341b88c9db472dd929c05c Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Sat, 9 Nov 2024 17:30:07 -0500 Subject: [PATCH 03/45] Pirate bounty fixes (#2378) * Pirate bounty fix WIP * More pirate bounty fixes, stack amounts --- .../_NF/Cargo/CargoSystem.PirateBounty.cs | 77 ++++++++----------- .../_NF/Pirate/SharedPirateSystem.cs | 15 ---- .../en-US/_NF/cargo/pirate-bounties.ftl | 5 +- .../_NF/Catalog/Bounties/pirate_bounties.yml | 50 ++++++------ 4 files changed, 61 insertions(+), 86 deletions(-) diff --git a/Content.Server/_NF/Cargo/CargoSystem.PirateBounty.cs b/Content.Server/_NF/Cargo/CargoSystem.PirateBounty.cs index 028325db0c1..b796f9f281a 100644 --- a/Content.Server/_NF/Cargo/CargoSystem.PirateBounty.cs +++ b/Content.Server/_NF/Cargo/CargoSystem.PirateBounty.cs @@ -18,6 +18,7 @@ using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; +using Content.Shared.Stacks; namespace Content.Server.Cargo.Systems; // Needs to collide with base namespace @@ -413,7 +414,7 @@ private void OnRedeemBounty(EntityUid uid, PirateBountyRedemptionConsoleComponen foreach (var (palletUid, _) in GetContrabandPallets(gridUid)) { foreach (var ent in _lookup.GetEntitiesIntersecting(palletUid, - LookupFlags.Dynamic | LookupFlags.Sundries | LookupFlags.Approximate)) + LookupFlags.Dynamic | LookupFlags.Sundries | LookupFlags.Approximate | LookupFlags.Sensors)) { // Dont match: // - anything anchored (e.g. light fixtures) @@ -489,7 +490,6 @@ private void OnRedeemBounty(EntityUid uid, PirateBountyRedemptionConsoleComponen if (amount > 0) { - // TODO: play a sound here, ideally the "deposit money" chime used on ATMs _stack.SpawnMultiple("Doubloon", amount, Transform(uid).Coordinates); _audio.PlayPvs(component.AcceptSound, uid); _popup.PopupEntity(Loc.GetString("pirate-bounty-redemption-success", ("bounties", redeemedBounties), ("amount", amount)), args.Actor); @@ -560,26 +560,7 @@ private void CheckEntityForPirateCrateBounty(EntityUid uid, ref PirateBountyEnti } else { - // Check entry against bounties - foreach (var entry in bounty.Prototype.Entries) - { - // Should add an assertion here, entry.Name should exist. - // Entry already fulfilled, skip this entity. - if (bounty.Entries[entry.Name] >= entry.Amount) - { - continue; - } - - // Check whitelists for the pirate bounty. - if (_whitelistSys.IsWhitelistPassOrNull(entry.Whitelist, ent) && - _entProtoIdWhitelist.IsWhitelistPassOrNull(entry.IdWhitelist, ent) && - _whitelistSys.IsBlacklistFailOrNull(entry.Blacklist, ent)) - { - bounty.Entries[entry.Name]++; - bounty.Entities.Add(ent); - break; - } - } + AdjustBountyForEntity(ent, bounty); state.HandledEntities.Add(ent); } } @@ -601,30 +582,40 @@ private void CheckEntityForPirateBounties(EntityUid uid, ref PirateBountyEntityS else { // 3b. If not tagged as labelled, check contents against non-create bounties. If it satisfies any of them, increase the quantity. - foreach (var (id, bounty) in state.LooseObjectBounties) + foreach (var (_, bounty) in state.LooseObjectBounties) { - foreach (var entry in bounty.Prototype.Entries) - { - // Should add an assertion here, entry.Name should exist. - // Entry already fulfilled, skip this entity. - if (bounty.Entries[entry.Name] >= entry.Amount) - { - continue; - } - - // Check whitelists for the pirate bounty. - if ((_whitelistSys.IsWhitelistPass(entry.Whitelist, uid) || - _entProtoIdWhitelist.IsWhitelistPass(entry.IdWhitelist, uid)) && - _whitelistSys.IsBlacklistFailOrNull(entry.Blacklist, uid)) - { - bounty.Entries[entry.Name]++; - bounty.Entities.Add(uid); - state.HandledEntities.Add(uid); - return; - } - } + if (AdjustBountyForEntity(uid, bounty)) + break; } } state.HandledEntities.Add(uid); } + + // Checks an object against a bounty, adjusts the bounty's state and returns true if it matches. + private bool AdjustBountyForEntity(EntityUid target, PirateBountyState bounty) + { + foreach (var entry in bounty.Prototype.Entries) + { + // Should add an assertion here, entry.Name should exist. + // Entry already fulfilled, skip this entity. + if (bounty.Entries[entry.Name] >= entry.Amount) + { + continue; + } + + // Check whitelists for the pirate bounty. + if ((_whitelistSys.IsWhitelistPass(entry.Whitelist, target) || + _entProtoIdWhitelist.IsWhitelistPass(entry.IdWhitelist, target)) && + _whitelistSys.IsBlacklistFailOrNull(entry.Blacklist, target)) + { + if (TryComp(target, out var stack)) + bounty.Entries[entry.Name] += stack.Count; + else + bounty.Entries[entry.Name]++; + bounty.Entities.Add(target); + return true; + } + } + return false; + } } diff --git a/Content.Shared/_NF/Pirate/SharedPirateSystem.cs b/Content.Shared/_NF/Pirate/SharedPirateSystem.cs index bf665b25283..fa2f65747b7 100644 --- a/Content.Shared/_NF/Pirate/SharedPirateSystem.cs +++ b/Content.Shared/_NF/Pirate/SharedPirateSystem.cs @@ -16,18 +16,3 @@ public enum PiratePalletConsoleUiKey : byte } public abstract class SharedPirateSystem : EntitySystem {} - -// TODO: remove these. -// [Serializable, NetSerializable] -// public enum PirateTelepadState : byte -// { -// Unpowered, -// Idle, -// Teleporting, -// }; - -// [Serializable, NetSerializable] -// public enum PirateTelepadVisuals : byte -// { -// State, -// }; diff --git a/Resources/Locale/en-US/_NF/cargo/pirate-bounties.ftl b/Resources/Locale/en-US/_NF/cargo/pirate-bounties.ftl index 3d5cf75d304..c569a8104ec 100644 --- a/Resources/Locale/en-US/_NF/cargo/pirate-bounties.ftl +++ b/Resources/Locale/en-US/_NF/cargo/pirate-bounties.ftl @@ -4,7 +4,7 @@ pirate-bounty-item-extinguisher = Fire Extinguisher pirate-bounty-item-captainGloves = Captain Gloves pirate-bounty-item-gyro = Gyroscope (any) pirate-bounty-item-defib = Defibrillator -pirate-bounty-item-researchDisk = Research Disk +pirate-bounty-item-researchDisk = Technology Disk pirate-bounty-item-alcohol = Booze Dispenser pirate-bounty-item-thruster = Thruster pirate-bounty-item-gravGen = Gravity Generator @@ -12,7 +12,7 @@ pirate-bounty-item-chemVend = ChemVend pirate-bounty-item-vendingmachine = Vending Machine (any) pirate-bounty-item-mercSuit = Mercenary Hardsuit pirate-bounty-item-cappy = Cappy -pirate-bounty-item-cultistNeck = Cultist Necklace +pirate-bounty-item-cultistNeck = Cultist Amulet pirate-bounty-item-nfsdCampaign = NFSD Campaign Hat (any) pirate-bounty-item-scafsuit = SCAF Suit pirate-bounty-item-rtg = RTG @@ -27,6 +27,7 @@ pirate-bounty-item-medicalfabboard = Medical Tech Fab Board pirate-bounty-item-orebox = Ore Box pirate-bounty-item-autolathe = Autolathe pirate-bounty-item-gold = Gold +pirate-bounty-item-diamond = Diamond pirate-bounty-item-plasmacanister = Plasma Canister pirate-bounty-item-contracrate = Contraband Crate pirate-bounty-item-hydrotray = Hydroponics Tray diff --git a/Resources/Prototypes/_NF/Catalog/Bounties/pirate_bounties.yml b/Resources/Prototypes/_NF/Catalog/Bounties/pirate_bounties.yml index 17e2f86e4ab..42cf7d08220 100644 --- a/Resources/Prototypes/_NF/Catalog/Bounties/pirate_bounties.yml +++ b/Resources/Prototypes/_NF/Catalog/Bounties/pirate_bounties.yml @@ -106,10 +106,9 @@ entries: - name: pirate-bounty-item-thruster amount: 3 - idWhitelist: - id: - - BaseThruster - matchParents: true + whitelist: + components: + - Thruster - type: pirateBounty id: PirateBountyGravGen @@ -262,9 +261,9 @@ id: - ArtifactAnalyzerMachineCircuitboard -- type: pirateBounty +- type: pirateBounty # FIXME: hotplate has no hard fixture id: PirateBountyHotplate - reward: 5 + reward: 3 description: pirate-bounty-description-generic spawnChest: false entries: @@ -317,7 +316,7 @@ amount: 1 idWhitelist: id: - - Hypospray + - HypoMini matchParents: true # NFSD/Limited Edition versions fine - type: pirateBounty @@ -344,17 +343,17 @@ id: - Autolathe -# needs work -# - type: pirateBounty -# id: PirateBountyDiamond -# reward: 4 -# description: pirate-bounty-description-generic -# entries: -# - name: pirate-bounty-item-diamond -# amount: 5 -# idWhitelist: -# id: -# - MaterialDiamond +- type: pirateBounty + id: PirateBountyDiamond + reward: 4 + description: pirate-bounty-description-generic + entries: + - name: pirate-bounty-item-diamond + amount: 10 + idWhitelist: + id: + - MaterialDiamond + matchParents: true # Singular vs. multiple diamonds - type: pirateBounty id: PirateBountyGold @@ -362,11 +361,12 @@ description: pirate-bounty-description-generic entries: - name: pirate-bounty-item-gold - amount: 5 + amount: 100 idWhitelist: id: - - GoldOre1 + - GoldOre - IngotGold + matchParents: true # Singular vs. multiple gold ore/ingot stacks - type: pirateBounty id: PirateBountyPlasmaCanister @@ -382,18 +382,16 @@ - type: pirateBounty id: PirateBountyContraCrate - reward: 3 + reward: 8 # Bonus of 2 doubloons vs. individual turn-in. description: pirate-bounty-description-generic spawnChest: false entries: - name: pirate-bounty-item-contracrate - amount: 1 + amount: 3 idWhitelist: id: - - CrateTradeContrabandSecureNormal - - CrateTradeContrabandSecureDonk - - CrateTradeContrabandSecureCyberSun - matchParents: true # Filled variants and non-filled ones + - CrateTradeBaseSecureContraband + matchParents: true # Should match trading crates and more valuable contraband crates - type: pirateBounty id: PirateBountyHydroTray From 182fdfe102d58c14ba41cca804333076714bc329 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Sat, 9 Nov 2024 22:30:31 +0000 Subject: [PATCH 04/45] Automatic Changelog (#2378) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 65635ff8d6a..2c6e102026e 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5193,3 +5193,9 @@ Entries: message: Removed Tritium and Frezon gas exude and consume mutations from botany. id: 5488 time: '2024-11-09T16:03:37.0000000+00:00' +- author: whatston3 + changes: + - type: Fix + message: Pirate bounties should now all be redeemable. + id: 5489 + time: '2024-11-09T22:30:07.0000000+00:00' From 0d82a55da7b6d83e7b447c389cee6d804d3c8c2a Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Sun, 10 Nov 2024 01:36:12 +0200 Subject: [PATCH 05/45] Auto rename warp points (#2383) --- .../Systems/StationRenameWarpsSystems.cs | 78 +++++- Content.Server/Warps/WarpPointComponent.cs | 16 +- Content.Server/Warps/WarpPointSystem.cs | 22 ++ .../_NF/GameRule/NfAdventureRuleSystem.cs | 29 ++- .../Components/TransitShuttleComponent.cs | 10 +- .../_NF/PublicTransit/PublicTransitSystem.cs | 11 + .../Smuggling/Components/DeadDropComponent.cs | 6 + .../_NF/Smuggling/DeadDropSystem.cs | 9 + .../Components/BluespaceErrorRuleComponent.cs | 18 ++ .../Events/BluespaceErrorRule.cs | 18 +- .../_NF/GameRule/PointOfInterestPrototype.cs | 14 +- .../Locale/en-US/_NF/adventure/adventure.ftl | 2 +- .../Locale/en-US/_NF/smuggling/deaddrop.ftl | 1 + Resources/Maps/_NF/Bluespace/bloodmoon.yml | 7 +- Resources/Maps/_NF/Bluespace/cache.yml | 5 - Resources/Maps/_NF/Bluespace/cave.yml | 6 +- Resources/Maps/_NF/Bluespace/mcevent.yml | 5 +- .../Maps/_NF/Bluespace/syndieftlintercept.yml | 7 +- Resources/Maps/_NF/Bluespace/vault.yml | 6 - Resources/Maps/_NF/Bluespace/vaultsmall.yml | 5 - .../Maps/_NF/Bluespace/wizardprobealt.yml | 7 +- Resources/Maps/_NF/DeadDrop/deaddrop.yml | 5 +- Resources/Maps/_NF/Outpost/frontier.yml | 4 +- Resources/Maps/_NF/POI/anomalousgeode.yml | 5 - Resources/Maps/_NF/POI/anomalouslab.yml | 5 +- Resources/Maps/_NF/POI/arena.yml | 5 +- Resources/Maps/_NF/POI/bahama.yml | 5 +- Resources/Maps/_NF/POI/beacon.yml | 5 +- Resources/Maps/_NF/POI/cargodepot.yml | 6 +- Resources/Maps/_NF/POI/cargodepotalt.yml | 6 +- Resources/Maps/_NF/POI/caseyscasino.yml | 5 +- Resources/Maps/_NF/POI/courthouse.yml | 5 +- Resources/Maps/_NF/POI/cove.yml | 5 +- Resources/Maps/_NF/POI/edison.yml | 6 +- Resources/Maps/_NF/POI/grifty.yml | 5 +- Resources/Maps/_NF/POI/lodge.yml | 5 +- Resources/Maps/_NF/POI/lpbravo.yml | 6 +- Resources/Maps/_NF/POI/mchobo.yml | 5 +- Resources/Maps/_NF/POI/nfsd.yml | 5 +- Resources/Maps/_NF/POI/northpole.yml | 5 +- Resources/Maps/_NF/POI/tinnia.yml | 5 +- Resources/Maps/_NF/POI/trade.yml | 5 +- Resources/Maps/_NF/Shuttles/Bus/publicts.yml | 4 - Resources/Maps/_NF/Test/dev_map.yml | 2 - .../Entities/Markers/warp_point.yml | 1 + .../_NF/Entities/Markers/warp_point.yml | 235 +----------------- .../_NF/Entities/Stations/nanotrasen.yml | 1 + .../Events/nf_bluespace_dungeons_events.yml | 2 +- .../Prototypes/_NF/PointsOfInterest/cove.yml | 1 + .../_NF/PointsOfInterest/lpbravo.yml | 1 + .../_NF/PointsOfInterest/northpole.yml | 2 + .../_NF/Procedural/basalt_vgroid.yml | 4 +- .../Prototypes/_NF/Procedural/cave_vgroid.yml | 4 +- .../_NF/Procedural/chromite_vgroid.yml | 4 +- .../Prototypes/_NF/Procedural/snow_vgroid.yml | 4 +- Resources/_NF/migration.yml | 5 +- 56 files changed, 266 insertions(+), 394 deletions(-) diff --git a/Content.Server/Station/Systems/StationRenameWarpsSystems.cs b/Content.Server/Station/Systems/StationRenameWarpsSystems.cs index cc717e1b64e..5e131baedd6 100644 --- a/Content.Server/Station/Systems/StationRenameWarpsSystems.cs +++ b/Content.Server/Station/Systems/StationRenameWarpsSystems.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Server.Station.Components; using Content.Server.Station.Events; using Content.Server.Warps; @@ -17,18 +18,19 @@ public override void Initialize() private void OnPostInit(EntityUid uid, StationRenameWarpsComponent component, ref StationPostInitEvent args) { - SyncWarpPoints(uid); + SyncWarpPointsToStation(uid); } private void OnRenamed(EntityUid uid, StationRenameWarpsComponent component, StationRenamedEvent args) { - SyncWarpPoints(uid); + SyncWarpPointsToStation(uid); } - private void SyncWarpPoints(EntityUid stationUid) + public List> SyncWarpPointsToStation(EntityUid stationUid) { + List> ret = new(); // update all warp points that belong to this station grid - var query = EntityQueryEnumerator(); + var query = AllEntityQuery(); while (query.MoveNext(out var uid, out var warp)) { if (!warp.UseStationName) @@ -40,6 +42,74 @@ private void SyncWarpPoints(EntityUid stationUid) var stationName = Name(warpStationUid.Value); warp.Location = stationName; + ret.Add((uid, warp)); } + return ret; + } + + public List> SyncWarpPointsToStations(IEnumerable stationUids) + { + List> ret = new(); + // update all warp points that belong to this station grid + var query = AllEntityQuery(); + while (query.MoveNext(out var uid, out var warp)) + { + if (!warp.UseStationName) + continue; + + var warpStationUid = _stationSystem.GetOwningStation(uid) ?? EntityUid.Invalid; + if (!warpStationUid.Valid || !stationUids.Contains(warpStationUid)) + continue; + + var stationName = Name(warpStationUid); + warp.Location = stationName; + ret.Add((uid, warp)); + } + return ret; + } + + // Grid name functions + public List> SyncWarpPointsToGrid(EntityUid gridUid) + { + List> ret = new(); + // update all warp points that belong to this station grid + var query = AllEntityQuery(); + while (query.MoveNext(out var uid, out var warp, out var xform)) + { + if (!warp.UseStationName) + continue; + + var warpGridUid = xform.GridUid ?? EntityUid.Invalid; + + if (!warpGridUid.Valid || gridUid != warpGridUid) + continue; + + var gridName = Name(warpGridUid); + warp.Location = gridName; + ret.Add((uid, warp)); + } + return ret; + } + + public List> SyncWarpPointsToGrids(IEnumerable gridUids) + { + List> ret = new(); + // update all warp points that belong to this station grid + var query = AllEntityQuery(); + while (query.MoveNext(out var uid, out var warp, out var xform)) + { + if (!warp.UseStationName) + continue; + + var warpGridUid = xform.GridUid ?? EntityUid.Invalid; + + if (!warpGridUid.Valid || !gridUids.Contains(warpGridUid)) + continue; + + var gridName = Name(warpGridUid); + warp.Location = gridName; + ret.Add((uid, warp)); + } + return ret; } } diff --git a/Content.Server/Warps/WarpPointComponent.cs b/Content.Server/Warps/WarpPointComponent.cs index 4876a55a7ab..c9be28f1646 100644 --- a/Content.Server/Warps/WarpPointComponent.cs +++ b/Content.Server/Warps/WarpPointComponent.cs @@ -16,7 +16,7 @@ public sealed partial class WarpPointComponent : Component public bool Follow; /// - /// Frontier - If true, will sync warp point name with a station name. + /// Frontier - If true, will sync warp point name with a station/grid name. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("useStationName")] @@ -29,5 +29,19 @@ public sealed partial class WarpPointComponent : Component [DataField("adminOnly")] public bool AdminOnly; // End Frontier + + /// + /// Frontier - If true, will set its own name to the station's on creation. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("queryStationName")] + public bool QueryStationName; + + /// + /// Frontier - If true, will set its own name to the grid's on creation. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("queryGridName")] + public bool QueryGridName; } } diff --git a/Content.Server/Warps/WarpPointSystem.cs b/Content.Server/Warps/WarpPointSystem.cs index d3b978a147d..2eb0ccf9273 100644 --- a/Content.Server/Warps/WarpPointSystem.cs +++ b/Content.Server/Warps/WarpPointSystem.cs @@ -1,14 +1,17 @@ using Content.Shared.Examine; using Content.Shared.Ghost; +using Content.Server.Station.Systems; // Frontier namespace Content.Server.Warps; public sealed class WarpPointSystem : EntitySystem { + [Dependency] private readonly StationSystem _station = default!; // Frontier public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnWarpPointExamine); + SubscribeLocalEvent(OnStartup); // Frontier } private void OnWarpPointExamine(EntityUid uid, WarpPointComponent component, ExaminedEvent args) @@ -19,4 +22,23 @@ private void OnWarpPointExamine(EntityUid uid, WarpPointComponent component, Exa var loc = component.Location == null ? "" : $"'{component.Location}'"; args.PushText(Loc.GetString("warp-point-component-on-examine-success", ("location", loc))); } + + // Frontier + private void OnStartup(EntityUid uid, WarpPointComponent component, ComponentStartup args) + { + if (component.QueryStationName + && _station.GetOwningStation(uid) is { Valid: true } station + && TryComp(station, out MetaDataComponent? stationMetadata)) + { + component.Location = stationMetadata.EntityName; + } + else if (component.QueryGridName + && TryComp(uid, out TransformComponent? xform) + && xform.GridUid is { Valid: true } grid + && TryComp(grid, out MetaDataComponent? gridMetadata)) + { + component.Location = gridMetadata.EntityName; + } + } + // End Frontier } diff --git a/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs b/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs index 7e752a1f49f..10a82ccf864 100644 --- a/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs +++ b/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs @@ -8,7 +8,6 @@ using Content.Shared._NF.GameRule; using Content.Server.Procedural; using Content.Server._NF.GameTicking.Events; -using Content.Shared.Procedural; using Robust.Server.GameObjects; using Robust.Server.Maps; using Robust.Shared.Console; @@ -16,7 +15,6 @@ using Robust.Shared.Map; using Robust.Shared.Prototypes; using Robust.Shared.Random; -using Robust.Shared.Map.Components; using Content.Shared.Shuttles.Components; using Content.Server.Shuttles.Systems; using Content.Server.Cargo.Components; @@ -24,7 +22,6 @@ using Content.Server.GameTicking.Rules; using Content.Server.Maps; using Content.Server.Station.Systems; -using Content.Shared.CCVar; using Content.Shared._NF.CCVar; // Frontier using Robust.Shared.Configuration; using Robust.Shared.Physics.Components; @@ -39,6 +36,7 @@ using Content.Shared.GameTicking; using Robust.Shared.Enums; using Robust.Server.Player; +using Content.Server.Warps; namespace Content.Server._NF.GameRule; @@ -53,12 +51,11 @@ public sealed class NfAdventureRuleSystem : GameRuleSystem> uniqueStations = new List(); foreach (var prototypeList in uniquePrototypes.Values) { - // Try to spawn + // Try to spawn _random.Shuffle(prototypeList); foreach (var proto in prototypeList) { @@ -406,9 +403,10 @@ private bool TrySpawnPoiGrid(PointOfInterestPrototype proto, Vector2 offset, out string stationName = string.IsNullOrEmpty(overrideName) ? proto.Name : overrideName; + EntityUid? stationUid = null; if (_prototypeManager.TryIndex(proto.ID, out var stationProto)) { - _station.InitializeNewStation(stationProto.Stations[proto.ID], mapUids, stationName); + stationUid = _station.InitializeNewStation(stationProto.Stations[proto.ID], mapUids, stationName); } // Cache our damping strength @@ -460,6 +458,23 @@ private bool TrySpawnPoiGrid(PointOfInterestPrototype proto, Vector2 offset, out prot.PreventArtifactTriggers = true; } } + + // Rename warp points after set up if needed + if (proto.NameWarp) + { + List> warpEnts; + if (stationUid != null) + warpEnts = _renameWarps.SyncWarpPointsToStation(stationUid.Value); + else + warpEnts = _renameWarps.SyncWarpPointsToGrids(mapUids); + + foreach (var warp in warpEnts) + { + if (proto.HideWarp) + warp.Comp.AdminOnly = true; + } + } + gridUid = mapUids[0]; return true; } diff --git a/Content.Server/_NF/PublicTransit/Components/TransitShuttleComponent.cs b/Content.Server/_NF/PublicTransit/Components/TransitShuttleComponent.cs index 6696db5bdd8..70be597d3a3 100644 --- a/Content.Server/_NF/PublicTransit/Components/TransitShuttleComponent.cs +++ b/Content.Server/_NF/PublicTransit/Components/TransitShuttleComponent.cs @@ -10,9 +10,15 @@ namespace Content.Server._NF.PublicTransit.Components; [RegisterComponent, Access(typeof(PublicTransitSystem))] public sealed partial class TransitShuttleComponent : Component { - [DataField("nextStation")] + /// + /// The name for the bus + /// + [DataField] + public LocId Name = "public-transit-shuttle-name"; + + [DataField] public EntityUid NextStation; - [DataField("nextTransfer", customTypeSerializer:typeof(TimeOffsetSerializer))] + [DataField(customTypeSerializer:typeof(TimeOffsetSerializer))] public TimeSpan NextTransfer; } diff --git a/Content.Server/_NF/PublicTransit/PublicTransitSystem.cs b/Content.Server/_NF/PublicTransit/PublicTransitSystem.cs index 2e33cd49750..21eb4d17d00 100644 --- a/Content.Server/_NF/PublicTransit/PublicTransitSystem.cs +++ b/Content.Server/_NF/PublicTransit/PublicTransitSystem.cs @@ -13,6 +13,8 @@ using Robust.Shared.Map; using Robust.Shared.Timing; using TimedDespawnComponent = Robust.Shared.Spawners.TimedDespawnComponent; +using Content.Server.Warps; +using Content.Server.Station.Systems; namespace Content.Server._NF.PublicTransit; @@ -28,6 +30,8 @@ public sealed class PublicTransitSystem : EntitySystem [Dependency] private readonly MapLoaderSystem _loader = default!; [Dependency] private readonly ShuttleSystem _shuttles = default!; [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly MetaDataSystem _meta = default!; + [Dependency] private readonly StationRenameWarpsSystems _renameWarps = default!; /// /// If enabled then spawns the bus and sets up the bus line. @@ -121,6 +125,13 @@ private void OnShuttleStartup(EntityUid uid, TransitShuttleComponent component, prot.PreventFloorPlacement = true; prot.PreventFloorRemoval = true; prot.PreventRCDUse = true; + + var stationName = Loc.GetString(component.Name); + + var meta = EnsureComp(uid); + _meta.SetEntityName(uid, stationName, meta); + + _renameWarps.SyncWarpPointsToGrid(uid); } /// diff --git a/Content.Server/_NF/Smuggling/Components/DeadDropComponent.cs b/Content.Server/_NF/Smuggling/Components/DeadDropComponent.cs index ba2fdbca7cd..2c88d94b739 100644 --- a/Content.Server/_NF/Smuggling/Components/DeadDropComponent.cs +++ b/Content.Server/_NF/Smuggling/Components/DeadDropComponent.cs @@ -10,6 +10,12 @@ namespace Content.Server._NF.Smuggling.Components; [Access(typeof(DeadDropSystem))] public sealed partial class DeadDropComponent : Component { + /// + /// The name for the deaddrop pod + /// + [DataField] + public LocId Name = "deaddrop-shuttle-name"; + /// /// When the next drop will occur. Used internally. /// diff --git a/Content.Server/_NF/Smuggling/DeadDropSystem.cs b/Content.Server/_NF/Smuggling/DeadDropSystem.cs index 5ec919c1b18..a7eb2573577 100644 --- a/Content.Server/_NF/Smuggling/DeadDropSystem.cs +++ b/Content.Server/_NF/Smuggling/DeadDropSystem.cs @@ -11,6 +11,7 @@ using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Server.StationEvents.Events; +using Content.Server.Warps; using Content.Shared._NF.CCVar; using Content.Shared._NF.Smuggling.Prototypes; using Content.Shared.Database; @@ -49,6 +50,7 @@ public sealed class DeadDropSystem : EntitySystem [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly SharedGameTicker _ticker = default!; [Dependency] private readonly LinkedLifecycleGridSystem _linkedLifecycleGrid = default!; + [Dependency] private readonly StationRenameWarpsSystems _stationRenameWarps = default!; private ISawmill _sawmill = default!; private readonly Queue _drops = []; @@ -468,6 +470,13 @@ private void SendDeadDrop(EntityUid uid, DeadDropComponent component, EntityUid return; } + var stationName = Loc.GetString(component.Name); + + var meta = EnsureComp(gridUids[0]); + _meta.SetEntityName(gridUids[0], stationName, meta); + + _stationRenameWarps.SyncWarpPointsToGrids(gridUids); + // Get sector info (with sane defaults if it doesn't exist) int maxSimultaneousPods = 5; int deadDropsThisHour = 0; diff --git a/Content.Server/_NF/StationEvents/Components/BluespaceErrorRuleComponent.cs b/Content.Server/_NF/StationEvents/Components/BluespaceErrorRuleComponent.cs index 18a56579eae..fd1348caaef 100644 --- a/Content.Server/_NF/StationEvents/Components/BluespaceErrorRuleComponent.cs +++ b/Content.Server/_NF/StationEvents/Components/BluespaceErrorRuleComponent.cs @@ -80,6 +80,16 @@ public interface IBluespaceSpawnGroup /// Should we set the metadata name of a grid. Useful for admin purposes. /// public bool NameGrid { get; set; } + + /// + /// Should we set the warppoint name based on the grid name. + /// + public bool NameWarp { get; set; } + + /// + /// Should we set the warppoint to be seen only by admins. + /// + public bool HideWarp { get; set; } } [DataRecord] @@ -112,6 +122,12 @@ public sealed class BluespaceDungeonSpawnGroup : IBluespaceSpawnGroup /// public bool NameGrid { get; set; } = false; + + /// + public bool NameWarp { get; set; } = false; // Loads in too late, cannot name warps, use WarpPointDungeon instead. + + /// + public bool HideWarp { get; set; } = false; } [DataRecord] @@ -130,4 +146,6 @@ public sealed class BluespaceGridSpawnGroup : IBluespaceSpawnGroup public int MaxCount { get; set; } = 1; public ComponentRegistry AddComponents { get; set; } = new(); public bool NameGrid { get; set; } = true; + public bool NameWarp { get; set; } = true; + public bool HideWarp { get; set; } = false; } diff --git a/Content.Server/_NF/StationEvents/Events/BluespaceErrorRule.cs b/Content.Server/_NF/StationEvents/Events/BluespaceErrorRule.cs index 3451a0951f7..592442252ca 100644 --- a/Content.Server/_NF/StationEvents/Events/BluespaceErrorRule.cs +++ b/Content.Server/_NF/StationEvents/Events/BluespaceErrorRule.cs @@ -15,6 +15,8 @@ using Content.Server.Procedural; using Robust.Shared.Prototypes; using Content.Shared.Salvage; +using Content.Server.Warps; +using Content.Server.Station.Systems; namespace Content.Server.StationEvents.Events; @@ -32,6 +34,8 @@ public sealed class BluespaceErrorRule : StationEventSystem 0) { _metadata.SetEntityName(spawned, Loc.GetString(_random.Pick(group.NameLoc))); + } if (_protoManager.TryIndex(group.NameDataset, out var dataset)) @@ -89,6 +94,16 @@ protected override void Started(EntityUid uid, BluespaceErrorRuleComponent compo _metadata.SetEntityName(spawned, SharedSalvageSystem.GetFTLName(dataset, _random.Next())); } + if (group.NameWarp) + { + var warps = _renameWarps.SyncWarpPointsToGrid(spawned); + foreach (var warp in warps) + { + if (group.HideWarp) + warp.Comp.AdminOnly = true; + } + } + EntityManager.AddComponents(spawned, group.AddComponents); component.GridsUid.Add(spawned); @@ -241,7 +256,8 @@ protected override void Ended(EntityUid uid, BluespaceErrorRuleComponent compone foreach (MapId mapId in component.MapsUid) { - _mapManager.DeleteMap(mapId); + if (_mapManager.MapExists(mapId)) + _mapManager.DeleteMap(mapId); } } } diff --git a/Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs b/Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs index e563a9199ec..f3506bfa0b9 100644 --- a/Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs +++ b/Content.Shared/_NF/GameRule/PointOfInterestPrototype.cs @@ -19,9 +19,21 @@ public sealed partial class PointOfInterestPrototype : IPrototype /// /// The name of this point of interest /// - [DataField] + [DataField(required: true)] public string Name { get; private set; } = ""; + /// + /// Should we set the warppoint name based on the grid name. + /// + [DataField] + public bool NameWarp { get; set; } = true; + + /// + /// Should we set the warppoint name based on the grid name. + /// + [DataField] + public bool HideWarp { get; set; } = false; + /// /// Minimum range to spawn this POI at /// diff --git a/Resources/Locale/en-US/_NF/adventure/adventure.ftl b/Resources/Locale/en-US/_NF/adventure/adventure.ftl index 72305911954..b0e638d3e18 100644 --- a/Resources/Locale/en-US/_NF/adventure/adventure.ftl +++ b/Resources/Locale/en-US/_NF/adventure/adventure.ftl @@ -29,7 +29,7 @@ shuttle-ftl-too-many = Too many shuttles already on expedition! changelog-tab-title-Upstream = Upstream Changelog multiauth-already-connected = Already connected to Frontier Official servers. +public-transit-shuttle-name = Public Transport Shuttle public-transit-departure = Now departing for {$destination}. Estimated travel time: {$flytime} seconds. public-transit-arrival = Thank you for choosing NT Public Transit. Next transfer to {$destination} departs in {$waittime} seconds. -adventure-space-dungeon-name = Space Dungeon: {$dungeonPrototype} \ No newline at end of file diff --git a/Resources/Locale/en-US/_NF/smuggling/deaddrop.ftl b/Resources/Locale/en-US/_NF/smuggling/deaddrop.ftl index 30a71e99065..8c3e5f97de0 100644 --- a/Resources/Locale/en-US/_NF/smuggling/deaddrop.ftl +++ b/Resources/Locale/en-US/_NF/smuggling/deaddrop.ftl @@ -1,3 +1,4 @@ +deaddrop-shuttle-name = Syndicate Supply Drop deaddrop-search-text = Search closer deaddrop-hint-pretext = A Syndicate drop pod will be dispatched to the following coordinates: deaddrop-hint-posttext = Our agents on the inside will pay anyone willing to smuggle these goods into NT territory. diff --git a/Resources/Maps/_NF/Bluespace/bloodmoon.yml b/Resources/Maps/_NF/Bluespace/bloodmoon.yml index 07f0a1b2eb2..c7c93ca0579 100644 --- a/Resources/Maps/_NF/Bluespace/bloodmoon.yml +++ b/Resources/Maps/_NF/Bluespace/bloodmoon.yml @@ -21,10 +21,7 @@ entities: - uid: 1 components: - type: MetaData - name: Unidentified Vessel - type: Transform - pos: -0.5156249,-0.5312496 - parent: invalid - type: MapGrid chunks: 0,0: @@ -7726,12 +7723,10 @@ entities: rot: 1.5707963267948966 rad pos: 11.5,-4.5 parent: 1 -- proto: WarpPointShip +- proto: WarpPoint entities: - uid: 468 components: - - type: MetaData - name: Blood Moon - type: Transform pos: 4.5,-17.5 parent: 1 diff --git a/Resources/Maps/_NF/Bluespace/cache.yml b/Resources/Maps/_NF/Bluespace/cache.yml index eebf3db4101..e45e0efd69b 100644 --- a/Resources/Maps/_NF/Bluespace/cache.yml +++ b/Resources/Maps/_NF/Bluespace/cache.yml @@ -17,10 +17,7 @@ entities: - uid: 1 components: - type: MetaData - name: Syndicate Weapons Cache - type: Transform - pos: 0.055290222,-0.28995132 - parent: invalid - type: MapGrid chunks: 0,0: @@ -5121,6 +5118,4 @@ entities: - type: Transform pos: 0.5,8.5 parent: 1 - - type: WarpPoint - location: Syndicate Weapons Cache ... diff --git a/Resources/Maps/_NF/Bluespace/cave.yml b/Resources/Maps/_NF/Bluespace/cave.yml index be83bb2e938..04ff8108855 100644 --- a/Resources/Maps/_NF/Bluespace/cave.yml +++ b/Resources/Maps/_NF/Bluespace/cave.yml @@ -13,10 +13,7 @@ entities: - uid: 1 components: - type: MetaData - name: Cave - type: Transform - pos: -0.453125,-0.52345467 - parent: invalid - type: MapGrid chunks: 0,0: @@ -3124,12 +3121,11 @@ entities: - type: Transform pos: -7.5,8.5 parent: 1 -- proto: WarpPointNFCave +- proto: WarpPoint entities: - uid: 136 components: - type: Transform - rot: 1.5707963267948966 rad pos: -0.5,4.5 parent: 1 ... diff --git a/Resources/Maps/_NF/Bluespace/mcevent.yml b/Resources/Maps/_NF/Bluespace/mcevent.yml index 5e6457a4004..14c6e7ae67d 100644 --- a/Resources/Maps/_NF/Bluespace/mcevent.yml +++ b/Resources/Maps/_NF/Bluespace/mcevent.yml @@ -15,10 +15,7 @@ entities: - uid: 1 components: - type: MetaData - name: McDelivery - type: Transform - pos: -0.48958334,-0.5208333 - parent: invalid - type: MapGrid chunks: 0,0: @@ -740,7 +737,7 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,2.5 parent: 1 -- proto: WarpPointNFMcDelivery +- proto: WarpPoint entities: - uid: 98 components: diff --git a/Resources/Maps/_NF/Bluespace/syndieftlintercept.yml b/Resources/Maps/_NF/Bluespace/syndieftlintercept.yml index df09a61efd0..43d1b96b252 100644 --- a/Resources/Maps/_NF/Bluespace/syndieftlintercept.yml +++ b/Resources/Maps/_NF/Bluespace/syndieftlintercept.yml @@ -22,10 +22,7 @@ entities: - uid: 1 components: - type: MetaData - name: Unidentified Vessel - type: Transform - pos: -0.484375,-0.49998474 - parent: invalid - type: MapGrid chunks: 0,0: @@ -5988,12 +5985,10 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-7.5 parent: 1 -- proto: WarpPointShip +- proto: WarpPoint entities: - uid: 894 components: - - type: MetaData - name: Intercepted Syndicate Ship - type: Transform pos: -0.5,0.5 parent: 1 diff --git a/Resources/Maps/_NF/Bluespace/vault.yml b/Resources/Maps/_NF/Bluespace/vault.yml index 0ef678d0d02..4f8c9c79821 100644 --- a/Resources/Maps/_NF/Bluespace/vault.yml +++ b/Resources/Maps/_NF/Bluespace/vault.yml @@ -24,10 +24,7 @@ entities: - uid: 1 components: - type: MetaData - name: Secure NT Vault - type: Transform - pos: 0.07584572,0.026101112 - parent: invalid - type: MapGrid chunks: 0,0: @@ -8940,11 +8937,8 @@ entities: - uid: 4 components: - type: Transform - rot: 1.5707963267948966 rad pos: 4.5,12.5 parent: 1 - - type: WarpPoint - location: The Vault - proto: WeaponTurretHostile entities: - uid: 104 diff --git a/Resources/Maps/_NF/Bluespace/vaultsmall.yml b/Resources/Maps/_NF/Bluespace/vaultsmall.yml index 65846a342f5..3ef61047be0 100644 --- a/Resources/Maps/_NF/Bluespace/vaultsmall.yml +++ b/Resources/Maps/_NF/Bluespace/vaultsmall.yml @@ -15,10 +15,7 @@ entities: - uid: 1 components: - type: MetaData - name: NT Secure Vault - type: Transform - pos: 0.12484646,0.026101112 - parent: invalid - type: MapGrid chunks: 0,0: @@ -2491,8 +2488,6 @@ entities: - type: Transform pos: 0.5,0.5 parent: 1 - - type: WarpPoint - location: The Vault - proto: WeaponTurretHostile entities: - uid: 3 diff --git a/Resources/Maps/_NF/Bluespace/wizardprobealt.yml b/Resources/Maps/_NF/Bluespace/wizardprobealt.yml index 010882ed53b..1fa048c9a6c 100644 --- a/Resources/Maps/_NF/Bluespace/wizardprobealt.yml +++ b/Resources/Maps/_NF/Bluespace/wizardprobealt.yml @@ -13,10 +13,7 @@ entities: - uid: 1 components: - type: MetaData - name: Unidentified Vessel - type: Transform - pos: -0.5,-0.50708264 - parent: invalid - type: MapGrid chunks: 0,0: @@ -6255,12 +6252,10 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-26.5 parent: 1 -- proto: WarpPointShip +- proto: WarpPoint entities: - uid: 903 components: - - type: MetaData - name: Wizard Federation Probe - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-2.5 diff --git a/Resources/Maps/_NF/DeadDrop/deaddrop.yml b/Resources/Maps/_NF/DeadDrop/deaddrop.yml index fa5b351cc95..2e215b9c89e 100644 --- a/Resources/Maps/_NF/DeadDrop/deaddrop.yml +++ b/Resources/Maps/_NF/DeadDrop/deaddrop.yml @@ -15,10 +15,7 @@ entities: - uid: 1 components: - type: MetaData - name: Syndicate Supply Drop - type: Transform - pos: -0.38888836,-0.59260035 - parent: invalid - type: MapGrid chunks: 0,0: @@ -962,7 +959,7 @@ entities: rot: 3.141592653589793 rad pos: 2.5,0.5 parent: 1 -- proto: WarpPointNFSyndicateSupplyDrop +- proto: WarpPoint entities: - uid: 116 components: diff --git a/Resources/Maps/_NF/Outpost/frontier.yml b/Resources/Maps/_NF/Outpost/frontier.yml index 9ed07b9c57d..0bf1167d31b 100644 --- a/Resources/Maps/_NF/Outpost/frontier.yml +++ b/Resources/Maps/_NF/Outpost/frontier.yml @@ -37,7 +37,6 @@ entities: - type: MetaData name: Frontier Outpost - type: Transform - pos: 0.121950805,-0.15609694 parent: 5691 - type: MapGrid chunks: @@ -36773,12 +36772,11 @@ entities: - type: Transform pos: 46.5,16.5 parent: 2173 -- proto: WarpPointNFFrontier +- proto: WarpPointShip entities: - uid: 5714 components: - type: Transform - rot: 3.141592653589793 rad pos: -0.5,11.5 parent: 2173 - proto: WaterCooler diff --git a/Resources/Maps/_NF/POI/anomalousgeode.yml b/Resources/Maps/_NF/POI/anomalousgeode.yml index 7724b31c0dc..e9a0c066f19 100644 --- a/Resources/Maps/_NF/POI/anomalousgeode.yml +++ b/Resources/Maps/_NF/POI/anomalousgeode.yml @@ -20,10 +20,7 @@ entities: - uid: 1 components: - type: MetaData - name: Anomalous Geode - type: Transform - pos: 0.14351851,0.09722221 - parent: invalid - type: MapGrid chunks: 0,0: @@ -4772,8 +4769,6 @@ entities: - type: Transform pos: 0.5,-1.5 parent: 1 - - type: WarpPoint - location: Anomalous Geode - proto: Wrench entities: - uid: 667 diff --git a/Resources/Maps/_NF/POI/anomalouslab.yml b/Resources/Maps/_NF/POI/anomalouslab.yml index e275e6b82f1..d8f298b5177 100644 --- a/Resources/Maps/_NF/POI/anomalouslab.yml +++ b/Resources/Maps/_NF/POI/anomalouslab.yml @@ -17,10 +17,7 @@ entities: - uid: 1 components: - type: MetaData - name: Anomalous Laboratory - type: Transform - pos: -0.5664107,-0.53686523 - parent: invalid - type: MapGrid chunks: 0,0: @@ -11482,7 +11479,7 @@ entities: - type: Transform pos: -2.5,12.5 parent: 1 -- proto: WarpPointNFLab +- proto: WarpPoint entities: - uid: 1481 components: diff --git a/Resources/Maps/_NF/POI/arena.yml b/Resources/Maps/_NF/POI/arena.yml index 276f7332864..b97fa674af6 100644 --- a/Resources/Maps/_NF/POI/arena.yml +++ b/Resources/Maps/_NF/POI/arena.yml @@ -26,10 +26,7 @@ entities: - uid: 2 components: - type: MetaData - name: Arena - type: Transform - pos: 0.10035038,0.17291927 - parent: invalid - type: MapGrid chunks: 0,0: @@ -20842,7 +20839,7 @@ entities: showEnts: False occludes: True ent: null -- proto: WarpPointNFArena +- proto: WarpPoint entities: - uid: 2346 components: diff --git a/Resources/Maps/_NF/POI/bahama.yml b/Resources/Maps/_NF/POI/bahama.yml index ac75bf48e8f..fa4eba05593 100644 --- a/Resources/Maps/_NF/POI/bahama.yml +++ b/Resources/Maps/_NF/POI/bahama.yml @@ -29,10 +29,7 @@ entities: - uid: 2 components: - type: MetaData - name: Bahama Mama's - type: Transform - pos: -0.53125,-0.5 - parent: invalid - type: MapGrid chunks: 0,0: @@ -20260,7 +20257,7 @@ entities: - type: Transform pos: -7.5,2.5 parent: 2 -- proto: WarpPointNFBahama +- proto: WarpPoint entities: - uid: 3365 components: diff --git a/Resources/Maps/_NF/POI/beacon.yml b/Resources/Maps/_NF/POI/beacon.yml index eab096447d2..53001d18354 100644 --- a/Resources/Maps/_NF/POI/beacon.yml +++ b/Resources/Maps/_NF/POI/beacon.yml @@ -26,10 +26,7 @@ entities: - uid: 1 components: - type: MetaData - name: Beacon - type: Transform - pos: -0.51562405,-0.4921837 - parent: invalid - type: MapGrid chunks: 0,0: @@ -8920,7 +8917,7 @@ entities: - type: Transform pos: -9.5,7.5 parent: 1 -- proto: WarpPointNFBeacon +- proto: WarpPoint entities: - uid: 1334 components: diff --git a/Resources/Maps/_NF/POI/cargodepot.yml b/Resources/Maps/_NF/POI/cargodepot.yml index b01542eabc9..28b181ff68e 100644 --- a/Resources/Maps/_NF/POI/cargodepot.yml +++ b/Resources/Maps/_NF/POI/cargodepot.yml @@ -18,10 +18,7 @@ entities: - uid: 10 components: - type: MetaData - name: CargoDepot - type: Transform - pos: -0.5,-0.5208335 - parent: invalid - type: MapGrid chunks: 0,0: @@ -7345,12 +7342,11 @@ entities: - type: Transform pos: 3.5,-2.5 parent: 10 -- proto: WarpPointNFCargo +- proto: WarpPoint entities: - uid: 292 components: - type: Transform - rot: 3.141592653589793 rad pos: 0.5,0.5 parent: 10 ... diff --git a/Resources/Maps/_NF/POI/cargodepotalt.yml b/Resources/Maps/_NF/POI/cargodepotalt.yml index ee61a255e90..3b938b034f8 100644 --- a/Resources/Maps/_NF/POI/cargodepotalt.yml +++ b/Resources/Maps/_NF/POI/cargodepotalt.yml @@ -18,10 +18,7 @@ entities: - uid: 10 components: - type: MetaData - name: CargoDepotAlt - type: Transform - pos: -0.5,-0.5208335 - parent: invalid - type: MapGrid chunks: 0,0: @@ -7402,12 +7399,11 @@ entities: - type: Transform pos: -2.5,3.5 parent: 10 -- proto: WarpPointNFCargo +- proto: WarpPoint entities: - uid: 292 components: - type: Transform - rot: 3.141592653589793 rad pos: 0.5,0.5 parent: 10 ... diff --git a/Resources/Maps/_NF/POI/caseyscasino.yml b/Resources/Maps/_NF/POI/caseyscasino.yml index 607cab12525..8efc51cda0b 100644 --- a/Resources/Maps/_NF/POI/caseyscasino.yml +++ b/Resources/Maps/_NF/POI/caseyscasino.yml @@ -19,10 +19,7 @@ entities: - uid: 2 components: - type: MetaData - name: CaseysCasino - type: Transform - pos: -0.5187805,-0.50625 - parent: invalid - type: MapGrid chunks: 0,0: @@ -8253,7 +8250,7 @@ entities: - type: Transform pos: 4.5,-8.5 parent: 2 -- proto: WarpPointNFCasino +- proto: WarpPoint entities: - uid: 1147 components: diff --git a/Resources/Maps/_NF/POI/courthouse.yml b/Resources/Maps/_NF/POI/courthouse.yml index fd69c73fe08..7020d0e8226 100644 --- a/Resources/Maps/_NF/POI/courthouse.yml +++ b/Resources/Maps/_NF/POI/courthouse.yml @@ -19,10 +19,7 @@ entities: - uid: 1 components: - type: MetaData - name: Courthouse - type: Transform - pos: -0.5,-0.53515625 - parent: invalid - type: MapGrid chunks: 0,0: @@ -11670,7 +11667,7 @@ entities: rot: 3.141592653589793 rad pos: 6.5,-13.5 parent: 1 -- proto: WarpPointNFCourthouse +- proto: WarpPoint entities: - uid: 1318 components: diff --git a/Resources/Maps/_NF/POI/cove.yml b/Resources/Maps/_NF/POI/cove.yml index 649e5e1f194..1e942244192 100644 --- a/Resources/Maps/_NF/POI/cove.yml +++ b/Resources/Maps/_NF/POI/cove.yml @@ -24,10 +24,7 @@ entities: - uid: 1 components: - type: MetaData - name: Cove - type: Transform - pos: -0.5,-0.6875 - parent: invalid - type: MapGrid chunks: 0,0: @@ -12840,7 +12837,7 @@ entities: rot: 3.141592653589793 rad pos: -5.5,37.5 parent: 1 -- proto: WarpPointNFCove +- proto: WarpPoint entities: - uid: 327 components: diff --git a/Resources/Maps/_NF/POI/edison.yml b/Resources/Maps/_NF/POI/edison.yml index 2fb95d7976a..cc6f528a2df 100644 --- a/Resources/Maps/_NF/POI/edison.yml +++ b/Resources/Maps/_NF/POI/edison.yml @@ -26,10 +26,7 @@ entities: - uid: 2 components: - type: MetaData - name: grid - type: Transform - pos: -0.5,-0.5 - parent: invalid - type: MapGrid chunks: 0,0: @@ -26989,12 +26986,11 @@ entities: rot: 3.141592653589793 rad pos: -20.5,31.5 parent: 2 -- proto: WarpPointNFEdison +- proto: WarpPoint entities: - uid: 3925 components: - type: Transform - rot: 1.5707963267948966 rad pos: 0.5,14.5 parent: 2 - proto: WaterCooler diff --git a/Resources/Maps/_NF/POI/grifty.yml b/Resources/Maps/_NF/POI/grifty.yml index a78fb9b252d..038cb1d263e 100644 --- a/Resources/Maps/_NF/POI/grifty.yml +++ b/Resources/Maps/_NF/POI/grifty.yml @@ -16,10 +16,7 @@ entities: - uid: 1 components: - type: MetaData - name: Grifty - type: Transform - pos: -0.484375,-0.47654724 - parent: invalid - type: MapGrid chunks: 0,0: @@ -6000,7 +5997,7 @@ entities: rot: 3.141592653589793 rad pos: -0.5,-0.5 parent: 1 -- proto: WarpPointNFGrifty +- proto: WarpPoint entities: - uid: 742 components: diff --git a/Resources/Maps/_NF/POI/lodge.yml b/Resources/Maps/_NF/POI/lodge.yml index a30e9ff9775..c495652bbe9 100644 --- a/Resources/Maps/_NF/POI/lodge.yml +++ b/Resources/Maps/_NF/POI/lodge.yml @@ -24,10 +24,7 @@ entities: - uid: 1 components: - type: MetaData - name: Expeditionary Lodge - type: Transform - pos: -0.421875,-0.421875 - parent: invalid - type: MapGrid chunks: 0,0: @@ -18012,7 +18009,7 @@ entities: - type: Transform pos: -8.5,14.5 parent: 1 -- proto: WarpPointNFLodge +- proto: WarpPoint entities: - uid: 3 components: diff --git a/Resources/Maps/_NF/POI/lpbravo.yml b/Resources/Maps/_NF/POI/lpbravo.yml index 3975d16834f..d557c5dfd7e 100644 --- a/Resources/Maps/_NF/POI/lpbravo.yml +++ b/Resources/Maps/_NF/POI/lpbravo.yml @@ -16,10 +16,7 @@ entities: - uid: 1 components: - type: MetaData - name: Listening Point Bravo - type: Transform - pos: 0.10000038,0.09999943 - parent: invalid - type: MapGrid chunks: 0,0: @@ -4530,12 +4527,11 @@ entities: rot: 3.141592653589793 rad pos: -7.5,-5.5 parent: 1 -- proto: WarpPointNFLPBravo +- proto: WarpPoint entities: - uid: 189 components: - type: Transform - rot: 3.141592653589793 rad pos: -0.5,-1.5 parent: 1 ... diff --git a/Resources/Maps/_NF/POI/mchobo.yml b/Resources/Maps/_NF/POI/mchobo.yml index c8cbcff22f5..65b0d594fed 100644 --- a/Resources/Maps/_NF/POI/mchobo.yml +++ b/Resources/Maps/_NF/POI/mchobo.yml @@ -22,10 +22,7 @@ entities: - uid: 1 components: - type: MetaData - name: McHobo - type: Transform - pos: -0.5,-0.6875 - parent: invalid - type: MapGrid chunks: 0,0: @@ -6689,7 +6686,7 @@ entities: - type: Transform pos: -2.5,7.5 parent: 1 -- proto: WarpPointNFMcHobo +- proto: WarpPoint entities: - uid: 5 components: diff --git a/Resources/Maps/_NF/POI/nfsd.yml b/Resources/Maps/_NF/POI/nfsd.yml index 7165780941c..beefaf9e4ce 100644 --- a/Resources/Maps/_NF/POI/nfsd.yml +++ b/Resources/Maps/_NF/POI/nfsd.yml @@ -26,10 +26,7 @@ entities: - uid: 1 components: - type: MetaData - name: Nfsd - type: Transform - pos: -0.5322278,-0.49355125 - parent: invalid - type: MapGrid chunks: 0,0: @@ -18065,7 +18062,7 @@ entities: - type: Transform pos: -6.5,17.5 parent: 1 -- proto: WarpPointNFNfsd +- proto: WarpPoint entities: - uid: 2222 components: diff --git a/Resources/Maps/_NF/POI/northpole.yml b/Resources/Maps/_NF/POI/northpole.yml index cedc235edbc..d40ade8cd22 100644 --- a/Resources/Maps/_NF/POI/northpole.yml +++ b/Resources/Maps/_NF/POI/northpole.yml @@ -22,10 +22,7 @@ entities: - uid: 1 components: - type: MetaData - name: The North Pole - type: Transform - pos: -0.16666698,-0.35185194 - parent: invalid - type: MapGrid chunks: 0,0: @@ -9428,7 +9425,7 @@ entities: rot: 3.141592653589793 rad pos: 0.5,26.5 parent: 1 -- proto: WarpPointNFPole +- proto: WarpPoint entities: - uid: 1288 components: diff --git a/Resources/Maps/_NF/POI/tinnia.yml b/Resources/Maps/_NF/POI/tinnia.yml index d9162a666ae..7602765409a 100644 --- a/Resources/Maps/_NF/POI/tinnia.yml +++ b/Resources/Maps/_NF/POI/tinnia.yml @@ -22,10 +22,7 @@ entities: - uid: 1 components: - type: MetaData - name: Tinnia - type: Transform - pos: -0.4250002,-0.625 - parent: invalid - type: MapGrid chunks: 0,0: @@ -13761,7 +13758,7 @@ entities: - type: Transform pos: 6.5,9.5 parent: 1 -- proto: WarpPointNFTinnia +- proto: WarpPoint entities: - uid: 2000 components: diff --git a/Resources/Maps/_NF/POI/trade.yml b/Resources/Maps/_NF/POI/trade.yml index 18f98ecf171..fdf954c679a 100644 --- a/Resources/Maps/_NF/POI/trade.yml +++ b/Resources/Maps/_NF/POI/trade.yml @@ -31,10 +31,7 @@ entities: - uid: 1 components: - type: MetaData - name: Trade - type: Transform - pos: -0.4687497,-0.4947884 - parent: invalid - type: MapGrid chunks: 0,1: @@ -39682,7 +39679,7 @@ entities: - type: Transform pos: -1.5,3.5 parent: 1 -- proto: WarpPointNFTrade +- proto: WarpPoint entities: - uid: 2939 components: diff --git a/Resources/Maps/_NF/Shuttles/Bus/publicts.yml b/Resources/Maps/_NF/Shuttles/Bus/publicts.yml index e0b667be1c1..55c09041aa6 100644 --- a/Resources/Maps/_NF/Shuttles/Bus/publicts.yml +++ b/Resources/Maps/_NF/Shuttles/Bus/publicts.yml @@ -17,9 +17,7 @@ entities: - uid: 8756 components: - type: MetaData - name: Public Transport Shuttle - type: Transform - parent: invalid - type: MapGrid chunks: -1,-1: @@ -963,6 +961,4 @@ entities: - type: Transform pos: -0.5,-1.5 parent: 8756 - - type: WarpPoint - location: Public Transport Shuttle ... diff --git a/Resources/Maps/_NF/Test/dev_map.yml b/Resources/Maps/_NF/Test/dev_map.yml index 13357aa9c9f..f9ef5541737 100644 --- a/Resources/Maps/_NF/Test/dev_map.yml +++ b/Resources/Maps/_NF/Test/dev_map.yml @@ -9513,8 +9513,6 @@ entities: - type: Transform pos: -4.5,3.5 parent: 179 - - type: WarpPoint - location: Frontier Debug - proto: WaterTankFull entities: - uid: 115 diff --git a/Resources/Prototypes/Entities/Markers/warp_point.yml b/Resources/Prototypes/Entities/Markers/warp_point.yml index 2536fde4745..47513045694 100644 --- a/Resources/Prototypes/Entities/Markers/warp_point.yml +++ b/Resources/Prototypes/Entities/Markers/warp_point.yml @@ -4,6 +4,7 @@ name: warp point components: - type: WarpPoint + useStationName: true # Frontier - type: Sprite state: pink diff --git a/Resources/Prototypes/_NF/Entities/Markers/warp_point.yml b/Resources/Prototypes/_NF/Entities/Markers/warp_point.yml index 3e152105aae..a51b91cc53d 100644 --- a/Resources/Prototypes/_NF/Entities/Markers/warp_point.yml +++ b/Resources/Prototypes/_NF/Entities/Markers/warp_point.yml @@ -1,241 +1,16 @@ - type: entity - id: WarpPointShip + id: WarpPointAdmin parent: WarpPoint - suffix: Ship + suffix: Admin-only, DO NOT MAP components: - type: WarpPoint - useStationName: true - -# Outpost -- type: entity - id: WarpPointNFFrontier - parent: WarpPoint - suffix: Outpost, Frontier - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Frontier Outpost - -# POI -- type: entity - id: WarpPointNFBeacon - parent: WarpPoint - suffix: POI, Omnichurch Beacon - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Omnichurch Beacon - -- type: entity - id: WarpPointNFLPBravo - parent: WarpPoint - suffix: POI, LP Bravo - categories: [ HideSpawnMenu ] - components: - - type: SyndicateFOB # For pinpointer - - type: WarpPoint - location: "Listening Point: Bravo" adminOnly: true - type: entity - id: WarpPointNFLodge - parent: WarpPoint - suffix: POI, Lodge - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: The Lodge - -- type: entity - id: WarpPointNFPole - parent: WarpPoint - suffix: POI, Pole - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: The North Pole - -- type: entity - id: WarpPointNFTinnia - parent: WarpPoint - suffix: POI, Tinnia - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Tinnia's Rest - -- type: entity - id: WarpPointNFTrade - parent: WarpPoint - suffix: POI, Trade - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Trade Outpost - -- type: entity - id: WarpPointNFLab - parent: WarpPoint - suffix: POI, Lab - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Anomalous Lab - -- type: entity - id: WarpPointNFArena - parent: WarpPoint - suffix: POI, Arena - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: The Pit - -- type: entity - id: WarpPointNFCargo - parent: WarpPoint - suffix: POI, Cargo - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Cargo Depot - -- type: entity - id: WarpPointNFCasino - parent: WarpPoint - suffix: POI, Casino - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Casey's Casino - -- type: entity - id: WarpPointNFCourthouse - parent: WarpPoint - suffix: POI, Courthouse - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Courthouse - -- type: entity - id: WarpPointNFCove - parent: WarpPoint - suffix: POI, Cove - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Pirate's Cove - adminOnly: true - -- type: entity - id: WarpPointNFGrifty - parent: WarpPoint - suffix: POI, Grifty - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Grifty's Gas and Grub - -- type: entity - id: WarpPointNFNfsd - parent: WarpPoint - suffix: POI, NFSD - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: NFSD Outpost - -- type: entity - id: WarpPointNFMcHobo - parent: WarpPoint - suffix: POI, McHobo - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Derelict McCargo - -- type: entity - id: WarpPointNFBahama - parent: WarpPoint - suffix: POI, Bahama - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Bahama Mama's - -- type: entity - id: WarpPointNFEdison - parent: WarpPoint - suffix: POI, Edison - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Edison Power Plant - -# Events -- type: entity - id: WarpPointNFMcDelivery - parent: WarpPoint - suffix: Event, McDelivery - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: McDelivery - -- type: entity - id: WarpPointNFCave - parent: WarpPoint - suffix: Event, Cave - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Cave - -# Dungeon -- type: entity - id: WarpPointNFDengeonBasalt - parent: WarpPoint - suffix: Dungeon, Basalt - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Dungeon (Basalt) - -- type: entity - id: WarpPointNFDengeonSnow - parent: WarpPoint - suffix: Dungeon, Snow - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Dungeon (Snow) - -- type: entity - id: WarpPointNFDengeonCave - parent: WarpPoint - suffix: Dungeon, Cave - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Dungeon (Cave) - -- type: entity - id: WarpPointNFDengeonChromite - parent: WarpPoint - suffix: Dungeon, Chromite - categories: [ HideSpawnMenu ] - components: - - type: WarpPoint - location: Dungeon (Chromite) - -# DeadDrop -- type: entity - id: WarpPointNFSyndicateSupplyDrop + id: WarpPointDungeon parent: WarpPoint - suffix: DeadDrop + suffix: Dungeon categories: [ HideSpawnMenu ] components: - type: WarpPoint - location: Syndicate Supply Drop - adminOnly: true \ No newline at end of file + queryGridName: true diff --git a/Resources/Prototypes/_NF/Entities/Stations/nanotrasen.yml b/Resources/Prototypes/_NF/Entities/Stations/nanotrasen.yml index 1ce8ae88ebe..4fdfdf308ae 100644 --- a/Resources/Prototypes/_NF/Entities/Stations/nanotrasen.yml +++ b/Resources/Prototypes/_NF/Entities/Stations/nanotrasen.yml @@ -12,6 +12,7 @@ - BaseStationSectorServices # Hosts all sector-wide services - BaseStationDampening - BaseStationDeadDropHintExempt # No hints + - BaseStationRenameWarpPoints categories: [ HideSpawnMenu ] components: - type: Transform diff --git a/Resources/Prototypes/_NF/Events/nf_bluespace_dungeons_events.yml b/Resources/Prototypes/_NF/Events/nf_bluespace_dungeons_events.yml index 806b6939950..ceada62aaf4 100644 --- a/Resources/Prototypes/_NF/Events/nf_bluespace_dungeons_events.yml +++ b/Resources/Prototypes/_NF/Events/nf_bluespace_dungeons_events.yml @@ -2,7 +2,7 @@ id: BluespaceDungeonBase parent: BaseStationEventShortDelay name: NT Bluespace Monitoring # This name shows up in the radio messages. - categories: [ HideSpawnMenu ] + abstract: true components: - type: StationEvent startRadioAnnouncement: station-event-bluespace-dungeon-start-announcement diff --git a/Resources/Prototypes/_NF/PointsOfInterest/cove.yml b/Resources/Prototypes/_NF/PointsOfInterest/cove.yml index 69cc072cc5d..15ad2b416b8 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/cove.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/cove.yml @@ -16,6 +16,7 @@ IFFColor: "#C83737" #red the color of ebil IFFFlags: [HideLabel] allowIFFChanges: true + hideWarp: true spawnGroup: Required gridPath: /Maps/_NF/POI/cove.yml diff --git a/Resources/Prototypes/_NF/PointsOfInterest/lpbravo.yml b/Resources/Prototypes/_NF/PointsOfInterest/lpbravo.yml index b2591414fe9..fbb8637cd5f 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/lpbravo.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/lpbravo.yml @@ -16,6 +16,7 @@ IFFColor: "#C83737" #red the color of ebil IFFFlags: [HideLabel, Hide] # Invisible allowIFFChanges: true + hideWarp: true spawnGroup: SyndicateFOB gridPath: /Maps/_NF/POI/lpbravo.yml diff --git a/Resources/Prototypes/_NF/PointsOfInterest/northpole.yml b/Resources/Prototypes/_NF/PointsOfInterest/northpole.yml index 28458f0a836..ee06494aba6 100644 --- a/Resources/Prototypes/_NF/PointsOfInterest/northpole.yml +++ b/Resources/Prototypes/_NF/PointsOfInterest/northpole.yml @@ -15,6 +15,8 @@ rangeMax: 4850 IFFColor: "#C83737" #red the color of ebil IFFFlags: [HideLabel] + allowIFFChanges: true + hideWarp: true spawnGroup: Christmas spawnChance: 0 gridPath: /Maps/_NF/POI/northpole.yml diff --git a/Resources/Prototypes/_NF/Procedural/basalt_vgroid.yml b/Resources/Prototypes/_NF/Procedural/basalt_vgroid.yml index 280ec71022d..8899745e079 100644 --- a/Resources/Prototypes/_NF/Procedural/basalt_vgroid.yml +++ b/Resources/Prototypes/_NF/Procedural/basalt_vgroid.yml @@ -34,7 +34,7 @@ - !type:OreDunGen tileMask: - FloorBasalt - entity: WarpPointNFDengeonBasalt + entity: WarpPointDungeon count: 1 minGroupSize: 1 maxGroupSize: 1 @@ -347,4 +347,4 @@ # Fill basalt - !type:BiomeTileLayer threshold: -1 - tile: FloorBasalt \ No newline at end of file + tile: FloorBasalt diff --git a/Resources/Prototypes/_NF/Procedural/cave_vgroid.yml b/Resources/Prototypes/_NF/Procedural/cave_vgroid.yml index 4471f62d984..6e3b8596801 100644 --- a/Resources/Prototypes/_NF/Procedural/cave_vgroid.yml +++ b/Resources/Prototypes/_NF/Procedural/cave_vgroid.yml @@ -34,7 +34,7 @@ - !type:OreDunGen tileMask: - FloorCaveDrought - entity: WarpPointNFDengeonCave + entity: WarpPointDungeon count: 1 minGroupSize: 1 maxGroupSize: 1 @@ -316,4 +316,4 @@ id: Loot - !type:BiomeTileLayer threshold: -1.0 - tile: FloorCaveDrought \ No newline at end of file + tile: FloorCaveDrought diff --git a/Resources/Prototypes/_NF/Procedural/chromite_vgroid.yml b/Resources/Prototypes/_NF/Procedural/chromite_vgroid.yml index e46246da77a..bd45dd679bb 100644 --- a/Resources/Prototypes/_NF/Procedural/chromite_vgroid.yml +++ b/Resources/Prototypes/_NF/Procedural/chromite_vgroid.yml @@ -34,7 +34,7 @@ - !type:OreDunGen tileMask: - FloorChromite - entity: WarpPointNFDengeonChromite + entity: WarpPointDungeon count: 1 minGroupSize: 1 maxGroupSize: 1 @@ -355,4 +355,4 @@ # Fill chromite - !type:BiomeTileLayer threshold: -1 - tile: FloorChromite \ No newline at end of file + tile: FloorChromite diff --git a/Resources/Prototypes/_NF/Procedural/snow_vgroid.yml b/Resources/Prototypes/_NF/Procedural/snow_vgroid.yml index a502553611e..4e700f9459f 100644 --- a/Resources/Prototypes/_NF/Procedural/snow_vgroid.yml +++ b/Resources/Prototypes/_NF/Procedural/snow_vgroid.yml @@ -34,7 +34,7 @@ - !type:OreDunGen tileMask: - FloorSnow - entity: WarpPointNFDengeonSnow + entity: WarpPointDungeon count: 1 minGroupSize: 1 maxGroupSize: 1 @@ -377,4 +377,4 @@ noise: seed: 0 frequency: 0.02 - fractalType: None \ No newline at end of file + fractalType: None diff --git a/Resources/_NF/migration.yml b/Resources/_NF/migration.yml index 52d43f8a374..0633ecf091f 100644 --- a/Resources/_NF/migration.yml +++ b/Resources/_NF/migration.yml @@ -89,4 +89,7 @@ WeaponRackPistolBaseSecurity: StructurePistolRackNfsd WeaponRackPistolWallmountedSecurity: StructurePistolRackWallmountedNfsd # 2024-10-09 Frontier: Fixups -SpawnPointDetectiveNF: NFSpawnPointDetective \ No newline at end of file +SpawnPointDetectiveNF: NFSpawnPointDetective + +# 2024-11-09 +WarpPointShip: WarpPoint From 5d53df221094fc6faf14ee5b928c04339209549f Mon Sep 17 00:00:00 2001 From: ErhardSteinhauer <65374927+ErhardSteinhauer@users.noreply.github.com> Date: Sun, 10 Nov 2024 04:56:02 +0300 Subject: [PATCH 06/45] More recyclable items (#2179) * base items * recyclable outer clothes * recycle books * more random items * instruments and flags * encryption keys, cartons * fix * ammo boxes * gun magazines * nades * tabletop games, dropper, pickaxe * monkey cubes, pills, lighters * traffic key (take that STC) * biomass from plants * flatpacks * cards, bullets, ame jar * reclaimer magnet radius, revert bullets * more tags for recycler * fix cards.yml * more fixes * floor tiles * tmp * upd --------- Co-authored-by: Checkraze <71046427+Cheackraze@users.noreply.github.com> --- .../Catalog/Fills/Boxes/general.yml | 2 +- .../Entities/Clothing/Back/backpacks.yml | 2 +- .../Clothing/Belt/base_clothingbelt.yml | 2 +- .../Entities/Clothing/Ears/headsets.yml | 2 +- .../Clothing/Eyes/base_clothingeyes.yml | 2 +- .../Clothing/Hands/base_clothinghands.yml | 2 +- .../Clothing/Head/base_clothinghead.yml | 2 +- .../Clothing/Masks/base_clothingmask.yml | 2 +- .../Clothing/Neck/base_clothingneck.yml | 2 +- .../Entities/Clothing/OuterClothing/armor.yml | 2 +- .../OuterClothing/base_clothingouter.yml | 4 +- .../Clothing/Shoes/base_clothingshoes.yml | 2 +- .../Uniforms/base_clothinguniforms.yml | 2 +- .../Consumable/Drinks/drinks-cartons.yml | 2 +- .../Objects/Consumable/Drinks/drinks_fun.yml | 4 +- .../Objects/Consumable/Food/ingredients.yml | 2 +- .../Objects/Consumable/Food/produce.yml | 2 +- .../Entities/Objects/Decoration/lidsalami.yml | 2 +- .../Objects/Devices/base_handheld.yml | 2 +- .../Objects/Devices/encryption_keys.yml | 18 +-- .../Entities/Objects/Devices/flatpack.yml | 2 +- .../Objects/Devices/forensic_scanner.yml | 2 +- .../Objects/Devices/holoprojectors.yml | 2 +- .../Entities/Objects/Devices/mousetrap.yml | 2 +- .../Entities/Objects/Devices/pinpointer.yml | 2 +- .../Entities/Objects/Devices/radio.yml | 2 +- .../Entities/Objects/Devices/station_map.yml | 2 +- .../Fun/Instruments/base_instruments.yml | 2 +- .../Entities/Objects/Fun/Tabletop/base.yml | 7 +- .../Prototypes/Entities/Objects/Fun/dice.yml | 2 +- .../Entities/Objects/Fun/dice_bag.yml | 2 +- .../Entities/Objects/Fun/figurines.yml | 2 +- .../Entities/Objects/Misc/bedsheets.yml | 2 +- .../Entities/Objects/Misc/books.yml | 5 +- .../Entities/Objects/Misc/candles.yml | 2 +- .../Entities/Objects/Misc/handy_flags.yml | 10 +- .../Entities/Objects/Misc/machine_parts.yml | 2 +- .../Entities/Objects/Misc/tiles.yml | 2 +- .../Entities/Objects/Power/antimatter_jar.yml | 3 + .../Entities/Objects/Power/powercells.yml | 2 +- .../Objects/Specific/Hydroponics/leaves.yml | 8 +- .../Objects/Specific/Hydroponics/seeds.yml | 2 +- .../Objects/Specific/Janitorial/janitor.yml | 6 +- .../Objects/Specific/Janitorial/soap.yml | 2 +- .../Objects/Specific/Janitorial/spray.yml | 2 +- .../Objects/Specific/Janitorial/trashbag.yml | 2 +- .../Objects/Specific/Medical/disease.yml | 4 +- .../Specific/Medical/healthanalyzer.yml | 2 +- .../Objects/Specific/Medical/morgue.yml | 2 +- .../Objects/Specific/chemical-containers.yml | 2 +- .../Entities/Objects/Specific/chemistry.yml | 6 +- .../Objects/Specific/rehydrateable.yml | 2 +- .../Entities/Objects/Tools/flare.yml | 2 +- .../Entities/Objects/Tools/flashlights.yml | 2 +- .../Entities/Objects/Tools/glowstick.yml | 2 +- .../Entities/Objects/Tools/hand_labeler.yml | 2 +- .../Objects/Tools/inflatable_wall.yml | 4 +- .../Entities/Objects/Tools/jaws_of_life.yml | 2 +- .../Entities/Objects/Tools/lantern.yml | 2 +- .../Entities/Objects/Tools/light_replacer.yml | 2 +- .../Entities/Objects/Tools/lighters.yml | 2 +- .../Entities/Objects/Tools/spray_painter.yml | 2 +- .../Entities/Objects/Tools/toolbox.yml | 2 +- .../Guns/Ammunition/Boxes/antimateriel.yml | 2 +- .../Guns/Ammunition/Boxes/caseless_rifle.yml | 2 +- .../Guns/Ammunition/Boxes/light_rifle.yml | 2 +- .../Weapons/Guns/Ammunition/Boxes/magnum.yml | 2 +- .../Weapons/Guns/Ammunition/Boxes/pistol.yml | 2 +- .../Weapons/Guns/Ammunition/Boxes/rifle.yml | 2 +- .../Weapons/Guns/Ammunition/Boxes/shotgun.yml | 2 +- .../Weapons/Guns/Ammunition/Boxes/toy.yml | 2 +- .../Ammunition/Magazines/caseless_rifle.yml | 2 +- .../Guns/Ammunition/Magazines/heavy_rifle.yml | 2 +- .../Guns/Ammunition/Magazines/light_rifle.yml | 2 +- .../Guns/Ammunition/Magazines/magnum.yml | 4 +- .../Guns/Ammunition/Magazines/pistol.yml | 8 +- .../Guns/Ammunition/Magazines/rifle.yml | 2 +- .../Guns/Ammunition/Magazines/shotgun.yml | 2 +- .../Entities/Objects/Weapons/Melee/mining.yml | 2 +- .../Objects/Weapons/Throwable/clusterbang.yml | 2 +- .../Objects/Weapons/Throwable/grenades.yml | 2 +- .../Structures/Furniture/rollerbeds.yml | 2 +- .../Entities/Objects/Misc/cards.yml | 4 +- .../Catalog/Fills/Paper/Shipyard/manuals.yml | 2 +- ...ing_base.yml => base_faction_clothing.yml} | 0 ..._base.yml => base_recyclable_clothing.yml} | 0 .../Objects/Devices/encryption_keys.yml | 2 +- .../Objects/Specific/Hydroponics/leaves.yml | 2 +- .../Objects/base_recyclable_items.yml | 153 ++++++++++++++++++ .../Machines/material_reclaimer.yml | 7 +- 90 files changed, 282 insertions(+), 115 deletions(-) rename Resources/Prototypes/_NF/Entities/Clothing/{faction_clothing_base.yml => base_faction_clothing.yml} (100%) rename Resources/Prototypes/_NF/Entities/Clothing/{recyclable_clothing_base.yml => base_recyclable_clothing.yml} (100%) create mode 100644 Resources/Prototypes/_NF/Entities/Objects/base_recyclable_items.yml diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/general.yml b/Resources/Prototypes/Catalog/Fills/Boxes/general.yml index 28242033e79..0e1e9b1a106 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/general.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/general.yml @@ -1,6 +1,6 @@ - type: entity name: cardboard box - parent: BoxBase + parent: [BoxBase, RecyclableItemCardboard] # Frontier: added RecyclableItemCardboard id: BoxCardboard description: A cardboard box for storing things. components: diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index ec1a82dcd14..bf67d8ecb33 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -1,5 +1,5 @@ - type: entity - parent: [Clothing, ContentsExplosionResistanceBase] + parent: [Clothing, ContentsExplosionResistanceBase, RecyclableItemClothBasic] # Frontier: added RecyclableItemClothBasic id: ClothingBackpack name: backpack description: You wear this on your back and put items into it. diff --git a/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml b/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml index 76af5067aea..39d5fcc05dd 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml @@ -1,6 +1,6 @@ - type: entity abstract: true - parent: Clothing + parent: [Clothing, RecyclableItemClothBasic] # Frontier: added RecyclableItemClothBasic id: ClothingBeltBase components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Clothing/Ears/headsets.yml b/Resources/Prototypes/Entities/Clothing/Ears/headsets.yml index 7c69f23a0ef..afb206c6194 100644 --- a/Resources/Prototypes/Entities/Clothing/Ears/headsets.yml +++ b/Resources/Prototypes/Entities/Clothing/Ears/headsets.yml @@ -1,6 +1,6 @@ - type: entity abstract: true - parent: Clothing + parent: [Clothing, RecyclableItemClothDevice] # Frontier: added RecyclableItemClothDevice id: ClothingHeadset name: headset description: An updated, modular intercom that fits over the head. Takes encryption keys. diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/base_clothingeyes.yml b/Resources/Prototypes/Entities/Clothing/Eyes/base_clothingeyes.yml index b31f821629d..52aaa8d8726 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/base_clothingeyes.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/base_clothingeyes.yml @@ -1,6 +1,6 @@ - type: entity abstract: true - parent: Clothing + parent: [Clothing, RecyclableItemClothDevice] # Frontier: added RecyclableItemClothDevice id: ClothingEyesBase components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml b/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml index bb494ffda41..e4c892924cf 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml @@ -1,6 +1,6 @@ - type: entity abstract: true - parent: Clothing + parent: [Clothing, RecyclableItemClothSmall] # Frontier: added RecyclableItemClothSmall id: ClothingHandsBase components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml b/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml index 46fe9ef09df..86c781ddb4d 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml @@ -1,6 +1,6 @@ - type: entity abstract: true - parent: Clothing + parent: [Clothing, RecyclableItemClothSmall] # Frontier: added RecyclableItemClothSmall id: ClothingHeadBase components: - type: Clothing diff --git a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml index ac8984a4196..b945c223179 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml @@ -1,6 +1,6 @@ - type: entity abstract: true - parent: Clothing + parent: [Clothing, RecyclableItemClothDevice] # Frontier: added RecyclableItemClothDevice id: ClothingMaskBase components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml b/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml index 608f061dd89..cd8fa87d087 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml @@ -1,6 +1,6 @@ - type: entity abstract: true - parent: Clothing + parent: [Clothing, RecyclableItemClothSmall] # Frontier: added RecyclableItemClothSmall id: ClothingNeckBase components: - type: Item diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index 7657812f78f..4c757ea4cad 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -3,7 +3,7 @@ #Basic armor vest - type: entity - parent: [ClothingOuterBaseMedium, AllowSuitStorageClothing, BaseC1Contraband] # Frontier: BaseRestrictedContraband Date: Sun, 10 Nov 2024 01:56:28 +0000 Subject: [PATCH 07/45] Automatic Changelog (#2179) --- Resources/Changelog/Frontier.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 2c6e102026e..68cefeca5a5 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5199,3 +5199,12 @@ Entries: message: Pirate bounties should now all be redeemable. id: 5489 time: '2024-11-09T22:30:07.0000000+00:00' +- author: erhardsteinhauer + changes: + - type: Tweak + message: >- + Expanded the list of items that can be recycled to such an extent that + salvaging may become a competitive alternative to mining for obtaining + raw materials. + id: 5490 + time: '2024-11-10T01:56:02.0000000+00:00' From daf83b2eab89529d5e093747fce9415c6758bbd7 Mon Sep 17 00:00:00 2001 From: ErhardSteinhauer <65374927+ErhardSteinhauer@users.noreply.github.com> Date: Sun, 10 Nov 2024 05:04:45 +0300 Subject: [PATCH 08/45] of biogenerator and biofabricator (#2304) * of biogenerator and biofabricator * biofab redacted * research * circuit imprinter * cloning price went up, small critters cost more * Update Content.Server/Cloning/CloningSystem.cs Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com> * BiomassRequirementMultiplier = 5 * biowood, biopapersheet * bioplastic * condiments, meat, soil bed * soiled * could be clean up * a bit of clean up * Biomass requirement fix * Update Resources/Prototypes/_NF/Recipes/Lathes/sheet.yml Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com> * upped plant bed price and print time --------- Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com> Co-authored-by: Whatstone --- Content.Server/Cloning/CloningSystem.cs | 6 +- Content.Shared/Cloning/CloningPodComponent.cs | 11 +- .../en-US/_NF/lathe/lathe-categories.ftl | 3 +- Resources/Maps/_NF/Dungeon/virology_lab.yml | 2 +- .../Structures/Machines/cloning_machine.yml | 2 + .../Entities/Structures/Machines/lathe.yml | 33 +++- .../Prototypes/Recipes/Lathes/biogen.yml | 4 +- .../Recipes/Lathes/rehydrateable.yml | 30 +-- Resources/Prototypes/Recipes/Lathes/sheet.yml | 2 +- .../Prototypes/Research/civilianservices.yml | 2 +- .../Spawners/Random/dungeon_items_general.yml | 2 +- .../Entities/Objects/Devices/flatpacks.yml | 24 +++ .../Entities/Structures/Machines/lathe.yml | 1 + .../_NF/Entities/Structures/soil.yml | 24 +++ Resources/Prototypes/_NF/Mail/mail.yml | 2 +- .../Construction/Graphs/structures/soil.yml | 29 +++ .../Prototypes/_NF/Recipes/Lathes/biogen.yml | 173 ++++++++++++++++++ .../_NF/Recipes/Lathes/categories.yml | 4 - .../_NF/Recipes/Lathes/materials.yml | 13 +- .../Prototypes/_NF/Recipes/Lathes/sheet.yml | 39 ++-- .../Objects/Devices/flatpack.rsi/meta.json | 5 +- .../_NF/Objects/Devices/flatpack.rsi/soil.png | Bin 0 -> 448 bytes 22 files changed, 353 insertions(+), 58 deletions(-) create mode 100644 Resources/Prototypes/_NF/Entities/Structures/soil.yml create mode 100644 Resources/Prototypes/_NF/Recipes/Construction/Graphs/structures/soil.yml create mode 100644 Resources/Prototypes/_NF/Recipes/Lathes/biogen.yml create mode 100644 Resources/Textures/_NF/Objects/Devices/flatpack.rsi/soil.png diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index 8114604ee3c..68cd86ad687 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -95,20 +95,22 @@ private void OnComponentInit(EntityUid uid, CloningPodComponent clonePod, Compon _signalSystem.EnsureSinkPorts(uid, CloningPodComponent.PodPort); } + // Frontier: machine parts upgrades private void OnPartsRefreshed(EntityUid uid, CloningPodComponent component, RefreshPartsEvent args) { var materialRating = args.PartRatings[component.MachinePartMaterialUse]; var speedRating = args.PartRatings[component.MachinePartCloningSpeed]; - component.BiomassRequirementMultiplier = MathF.Pow(component.PartRatingMaterialMultiplier, materialRating - 1); + component.BiomassRequirementMultiplier = component.BaseBiomassRequirementMultiplier * MathF.Pow(component.PartRatingMaterialMultiplier, materialRating - 1); component.CloningTime = component.BaseCloningTime * MathF.Pow(component.PartRatingSpeedMultiplier, speedRating - 1); } private void OnUpgradeExamine(EntityUid uid, CloningPodComponent component, UpgradeExamineEvent args) { args.AddPercentageUpgrade("cloning-pod-component-upgrade-speed", component.BaseCloningTime / component.CloningTime); - args.AddPercentageUpgrade("cloning-pod-component-upgrade-biomass-requirement", component.BiomassRequirementMultiplier); + args.AddPercentageUpgrade("cloning-pod-component-upgrade-biomass-requirement", component.BiomassRequirementMultiplier / component.BaseBiomassRequirementMultiplier); } + // End Frontier internal void TransferMindToClone(EntityUid mindId, MindComponent mind) { diff --git a/Content.Shared/Cloning/CloningPodComponent.cs b/Content.Shared/Cloning/CloningPodComponent.cs index 60d4c1e64e5..e783d7dcc1d 100644 --- a/Content.Shared/Cloning/CloningPodComponent.cs +++ b/Content.Shared/Cloning/CloningPodComponent.cs @@ -88,11 +88,20 @@ public sealed partial class CloningPodComponent : Component [DataField("partRatingMaterialMultiplier")] public float PartRatingMaterialMultiplier = 0.85f; + // Frontier: machine part upgrades + /// + /// The base multiplier on the body weight, which determines the + /// amount of biomass needed to clone, and is affected by part upgrades. + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public float BaseBiomassRequirementMultiplier = 1; + + // Frontier: machine part upgrades /// /// The current multiplier on the body weight, which determines the /// amount of biomass needed to clone. /// - [ViewVariables(VVAccess.ReadWrite)] + [DataField, ViewVariables(VVAccess.ReadWrite)] public float BiomassRequirementMultiplier = 1; /// diff --git a/Resources/Locale/en-US/_NF/lathe/lathe-categories.ftl b/Resources/Locale/en-US/_NF/lathe/lathe-categories.ftl index 984e91b8395..1edcfb71f7a 100644 --- a/Resources/Locale/en-US/_NF/lathe/lathe-categories.ftl +++ b/Resources/Locale/en-US/_NF/lathe/lathe-categories.ftl @@ -3,5 +3,4 @@ lathe-category-armor-nf = Armor lathe-category-storage-nf = Storage lathe-category-kitchen-nf = Kitchen lathe-category-clothes-nf = Clothes -lathe-category-medical-nf = Medical -lathe-category-materials-nf = Materials \ No newline at end of file +lathe-category-medical-nf = Medical \ No newline at end of file diff --git a/Resources/Maps/_NF/Dungeon/virology_lab.yml b/Resources/Maps/_NF/Dungeon/virology_lab.yml index d71a1d8ccd3..7d4b57834cd 100644 --- a/Resources/Maps/_NF/Dungeon/virology_lab.yml +++ b/Resources/Maps/_NF/Dungeon/virology_lab.yml @@ -2998,7 +2998,7 @@ entities: - type: Transform pos: 8.500196,21.585516 parent: 1653 -- proto: Biofabricator +- proto: Biogenerator entities: - uid: 1376 components: diff --git a/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml index 09902be9707..4fa46c7ad90 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml @@ -5,6 +5,8 @@ description: A Cloning Pod. 50% reliable. components: - type: CloningPod + baseBiomassRequirementMultiplier: 5 # Frontier + biomassRequirementMultiplier: 5 # Frontier - type: DeviceList - type: DeviceNetwork deviceNetId: Wired diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index cf78f8be1d6..4b8dfe50c70 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -493,7 +493,7 @@ - ProtolatheMachineCircuitboard - AutolatheMachineCircuitboard - CircuitImprinterMachineCircuitboard - - BiogeneratorMachineCircuitboard + # - BiogeneratorMachineCircuitboard # Frontier - OreProcessorMachineCircuitboard - ElectrolysisUnitMachineCircuitboard - CentrifugeMachineCircuitboard @@ -525,7 +525,7 @@ - ChemMasterMachineCircuitboard - ChemDispenserMachineCircuitboard - BiomassReclaimerMachineCircuitboard - - BiofabricatorMachineCircuitboard + - BiogeneratorMachineCircuitboard # Frontier BiofabricatorMachineCircuitboardPx$dPzhkzb-cQ8YXFGml{B_|F<*C( z03K9C6p-f4GYrf{c)AIUG0=Bf!w2vv?>NnY&o39zyh0cV15c+v* z@D(ugYH`&lW^nR!+F zyZbO(*H}PS0;k7an^<(V7z^McM8ZIkcBt*v0{V6@7NTty^hH=eTS(g{Lh>Ia;I(<& z->4?YU&7X2Z2VQ2y#mc5WBl|P;Am25%b-(mZ~-JCAPMR8x7(s^uL4Ly5HDiHi@4Jt z8qiw6K7x%B@K+*?PXQ0iUjY}x`@M6| Date: Sun, 10 Nov 2024 02:05:13 +0000 Subject: [PATCH 09/45] Automatic Changelog (#2304) --- Resources/Changelog/Frontier.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 68cefeca5a5..fa4b080dfb3 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5208,3 +5208,21 @@ Entries: raw materials. id: 5490 time: '2024-11-10T01:56:02.0000000+00:00' +- author: erhardsteinhauer + changes: + - type: Tweak + message: >- + Added more recipes to biogenerator including various animal cubes, + bioplastic, biowood, biopapersheet and soil crate. + - type: Tweak + message: Biogenerator replaced biocube fabricator in research tree. + - type: Tweak + message: >- + Increased biomass requirements for printing animal/critter cubes and for + cloning. + - type: Tweak + message: >- + Soil beds can now be printed from the biogenerator and assembled with a + shovel. + id: 5491 + time: '2024-11-10T02:04:45.0000000+00:00' From ebc2a134bc2fc30dad1e938c4899f0a4ed58e40d Mon Sep 17 00:00:00 2001 From: ErhardSteinhauer <65374927+ErhardSteinhauer@users.noreply.github.com> Date: Sun, 10 Nov 2024 05:14:40 +0300 Subject: [PATCH 10/45] Stashes (#2347) * Stashes * AnchorableStorage comp/sys, backpack fixes * Requested edits from MilonPL * hate linq --------- Co-authored-by: Whatstone Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com> Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com> --- .../_NF/Storage/AnchorableStorageComponent.cs | 8 ++ .../_NF/Storage/AnchorableStorageSystem.cs | 115 ++++++++++++++++++ .../en-US/_NF/storage/anchorable-storage.ftl | 1 + .../VendingMachines/Inventories/detdrobe.yml | 1 + .../Entities/Clothing/Back/backpacks.yml | 5 +- .../Entities/Clothing/Back/duffel.yml | 1 + .../Entities/Clothing/Back/specific.yml | 2 +- .../_NF/Catalog/Fills/Backpacks/duffelbag.yml | 22 ++-- .../_NF/Entities/Clothing/Back/backpacks.yml | 6 +- .../Clothing/Back/base_clothing_backpack.yml | 19 ++- .../_NF/Loadouts/Jobs/Contractor/bags.yml | 4 +- 11 files changed, 161 insertions(+), 23 deletions(-) create mode 100644 Content.Server/_NF/Storage/AnchorableStorageComponent.cs create mode 100644 Content.Server/_NF/Storage/AnchorableStorageSystem.cs create mode 100644 Resources/Locale/en-US/_NF/storage/anchorable-storage.ftl diff --git a/Content.Server/_NF/Storage/AnchorableStorageComponent.cs b/Content.Server/_NF/Storage/AnchorableStorageComponent.cs new file mode 100644 index 00000000000..13a987bc568 --- /dev/null +++ b/Content.Server/_NF/Storage/AnchorableStorageComponent.cs @@ -0,0 +1,8 @@ +namespace Content.Server._NF.Storage; + +/// +/// This is used for restricting anchor operations on storage (one bag max per tile) +/// and ejecting sapient contents on anchor. +/// +[RegisterComponent] +public sealed partial class AnchorableStorageComponent : Component; diff --git a/Content.Server/_NF/Storage/AnchorableStorageSystem.cs b/Content.Server/_NF/Storage/AnchorableStorageSystem.cs new file mode 100644 index 00000000000..aae7868bdbf --- /dev/null +++ b/Content.Server/_NF/Storage/AnchorableStorageSystem.cs @@ -0,0 +1,115 @@ +using System.Linq; +using Content.Server.Popups; +using Content.Shared.Construction.Components; +using Content.Shared.Mind.Components; +using Content.Shared.Nyanotrasen.Item.PseudoItem; +using Content.Shared.Storage; +using JetBrains.Annotations; +using Robust.Server.GameObjects; +using Robust.Shared.Containers; +using Robust.Shared.Map.Components; + +namespace Content.Server._NF.Storage; + +/// +/// This is used for restricting anchor operations on storage (one bag max per tile) +/// and ejecting living contents on anchor. +/// +public sealed class AnchorableStorageSystem : EntitySystem +{ + [Dependency] private readonly MapSystem _map = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly TransformSystem _xform = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnAnchorStateChanged); + SubscribeLocalEvent(OnAnchorAttempt); + SubscribeLocalEvent(OnInsertAttempt); + } + + private void OnAnchorStateChanged(Entity ent, ref AnchorStateChangedEvent args) + { + if (!args.Anchored) + return; + + if (CheckOverlap((ent, ent.Comp, Transform(ent)))) + { + _popup.PopupEntity(Loc.GetString("anchored-storage-already-present"), ent); + _xform.Unanchor(ent, Transform(ent)); + return; + } + + // Eject any sapient creatures inside the storage. + // Does not recurse down into bags in bags - player characters are the largest concern, and they'll only fit in duffelbags. + if (!TryComp(ent.Owner, out StorageComponent? storage)) + return; + + var entsToRemove = storage.StoredItems.Keys.Where(storedItem => + HasComp(storedItem) + || HasComp(storedItem) + ).ToList(); + + foreach (var removeUid in entsToRemove) + _container.RemoveEntity(ent.Owner, removeUid); + } + + private void OnAnchorAttempt(Entity ent, ref AnchorAttemptEvent args) + { + if (args.Cancelled) + return; + + // Nothing around? We can anchor without issue. + if (!CheckOverlap((ent, ent.Comp, Transform(ent)))) + return; + + _popup.PopupEntity(Loc.GetString("anchored-storage-already-present"), ent, args.User); + args.Cancel(); + } + + private void OnInsertAttempt(Entity ent, ref ContainerIsInsertingAttemptEvent args) + { + if (args.Cancelled) + return; + + // Check for living things, they should not insert when anchored. + if (!HasComp(args.EntityUid) && !HasComp(args.EntityUid)) + return; + + if (Transform(ent.Owner).Anchored) + args.Cancel(); + } + + [PublicAPI] + public bool CheckOverlap(EntityUid uid) + { + if (!TryComp(uid, out AnchorableStorageComponent? comp)) + return false; + + return CheckOverlap((uid, comp, Transform(uid))); + } + + public bool CheckOverlap(Entity ent) + { + if (ent.Comp2.GridUid is not { } grid || !TryComp(grid, out var gridComp)) + return false; + + var indices = _map.TileIndicesFor(grid, gridComp, ent.Comp2.Coordinates); + var enumerator = _map.GetAnchoredEntitiesEnumerator(grid, gridComp, indices); + + while (enumerator.MoveNext(out var otherEnt)) + { + // Don't match yourself. + if (otherEnt == ent.Owner) + continue; + + // Is another storage entity is already anchored here? + if (HasComp(otherEnt)) + return true; + } + + return false; + } +} diff --git a/Resources/Locale/en-US/_NF/storage/anchorable-storage.ftl b/Resources/Locale/en-US/_NF/storage/anchorable-storage.ftl new file mode 100644 index 00000000000..799d15cf649 --- /dev/null +++ b/Resources/Locale/en-US/_NF/storage/anchorable-storage.ftl @@ -0,0 +1 @@ +anchored-storage-already-present = There's already a bag anchored here! diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml index 3e455b84676..2d29e8b48a8 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/detdrobe.yml @@ -15,3 +15,4 @@ ClothingHandsGlovesColorBlack: 2 ClothingHandsGlovesLatex: 2 ClothingHeadsetSecurityCommon: 2 # Ask SR or Sheriff for keys + trayScanner: 2 # Frontier diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index bf67d8ecb33..953a0c6a4bc 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -3,6 +3,7 @@ id: ClothingBackpack name: backpack description: You wear this on your back and put items into it. + categories: [ HideSpawnMenu ] # Frontier components: - type: Sprite sprite: Clothing/Back/Backpacks/backpack.rsi @@ -193,7 +194,7 @@ #ERT - type: entity - parent: [ ClothingBackpack, BaseCentcommContraband ] + parent: [ NFClothingBackpack, BaseCentcommContraband ] # Frontier: ClothingBackpack Date: Sun, 10 Nov 2024 02:15:06 +0000 Subject: [PATCH 11/45] Automatic Changelog (#2347) --- Resources/Changelog/Frontier.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index fa4b080dfb3..6c43ed7ec83 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5226,3 +5226,14 @@ Entries: shovel. id: 5491 time: '2024-11-10T02:04:45.0000000+00:00' +- author: erhardsteinhauer + changes: + - type: Add + message: >- + Bags (backpacks, duffels, etc.) can be anchored to floor plating under + floor tiles to create a hidden stash. T-Ray scanners can be used to find + hidden stashes. + - type: Tweak + message: Added T-Ray scanner to DetDrobe. + id: 5492 + time: '2024-11-10T02:14:40.0000000+00:00' From 8612ea8d88b37c80a317676305fcb8002ba4d2a3 Mon Sep 17 00:00:00 2001 From: dustylens <54123313+dustylens@users.noreply.github.com> Date: Sun, 10 Nov 2024 12:20:24 +0000 Subject: [PATCH 12/45] Condenser Power Adjustment (#2364) * Condenser Power Adjustment * Update unary.yml --------- Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com> --- .../Entities/Structures/Piping/Atmospherics/unary.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index 1a0f91cee5c..dc6bf31177e 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -389,7 +389,7 @@ - type: AtmosDevice - type: PipeRestrictOverlap - type: ApcPowerReceiver - powerLoad: 10000 + powerLoad: 3000 # Frontier 10000<3000 - type: Machine board: CondenserMachineCircuitBoard - type: WiresPanel From 3121a4488ee2cedf5e94114b9bf4ab6095ba2e8c Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Sun, 10 Nov 2024 12:24:15 +0000 Subject: [PATCH 13/45] Automatic Changelog (#2364) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 6c43ed7ec83..276e5a3b3ae 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5237,3 +5237,9 @@ Entries: message: Added T-Ray scanner to DetDrobe. id: 5492 time: '2024-11-10T02:14:40.0000000+00:00' +- author: dustylens + changes: + - type: Tweak + message: Adjusted condenser power draw from 10k to 3k. + id: 5493 + time: '2024-11-10T12:20:24.0000000+00:00' From 9e282a4b61432781af3316e9f8b8336b2059751a Mon Sep 17 00:00:00 2001 From: KieueCaprie <103897346+KieueCaprie@users.noreply.github.com> Date: Sun, 10 Nov 2024 20:50:24 +0000 Subject: [PATCH 14/45] Add ingot to the list of valid materials to insert in the cutter machine. (#2387) --- Resources/Prototypes/Entities/Structures/Machines/lathe.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 4b8dfe50c70..bdd5a705e8c 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -1599,3 +1599,4 @@ - Wooden - RawMaterial - Plastic + - Ingot # Frontier From 9089839b6c0809a14b558fe9639fa4e66ec3b609 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Sun, 10 Nov 2024 20:50:47 +0000 Subject: [PATCH 15/45] Automatic Changelog (#2387) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 276e5a3b3ae..9f951967c93 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5243,3 +5243,9 @@ Entries: message: Adjusted condenser power draw from 10k to 3k. id: 5493 time: '2024-11-10T12:20:24.0000000+00:00' +- author: KieueCaprie + changes: + - type: Fix + message: The cutter machine now accepts gold and silver ingots. + id: 5494 + time: '2024-11-10T20:50:24.0000000+00:00' From 02fda0f999eb69f6678d600755de7647247aba7e Mon Sep 17 00:00:00 2001 From: Tych0 <151581207+Tych0theSynth@users.noreply.github.com> Date: Mon, 11 Nov 2024 19:01:01 +0000 Subject: [PATCH 16/45] Mass Scanner and Radar Telescreens (#2351) * Add mass scanner and radar telescreens * Wallmount construction, tabletop fixes * Remove unused (and undefined!) tags --------- Co-authored-by: Whatstone Co-authored-by: Alice "Arimah" Heurlin <30327355+arimah@users.noreply.github.com> --- .../NodeEntities/BoardNodeEntity.cs | 31 +++- .../ComputerTabletopBoardComponent.cs | 2 +- .../ComputerWallmountBoardComponent.cs | 15 ++ .../Devices/Circuitboards/computer.yml | 4 + .../Computers/computers_wallmount.yml | 26 ++++ .../Machines/Computers/frame_wallmount.yml | 76 ++++++++++ .../Graphs/machines/computer_tabletop.yml | 6 +- .../Graphs/machines/computer_wallmount.yml | 141 ++++++++++++++++++ .../_NF/Recipes/Construction/machines.yml | 17 +++ Resources/Prototypes/_NF/tags.yml | 10 +- .../broken_wallmount.png | Bin 0 -> 881 bytes .../computer_board_exposed.png | Bin 0 -> 1565 bytes .../computer_monitor_unscrewed.png | Bin 0 -> 1353 bytes .../computer_needs_wires.png | Bin 0 -> 1356 bytes .../computer_no_monitor.png | Bin 0 -> 1593 bytes .../computer_wallmount.png | Bin 0 -> 1256 bytes .../computer_wallmount_frame.png | Bin 0 -> 1287 bytes .../Machines/computer_wallmount.rsi/meta.json | 48 ++++++ .../computer_wallmount.rsi/screen_mass.png | Bin 0 -> 1011 bytes .../computer_wallmount.rsi/screen_radar.png | Bin 0 -> 942 bytes 20 files changed, 362 insertions(+), 14 deletions(-) rename Content.Server/{ => _NF}/Construction/Components/ComputerTabletopBoardComponent.cs (90%) create mode 100644 Content.Server/_NF/Construction/Components/ComputerWallmountBoardComponent.cs create mode 100644 Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers_wallmount.yml create mode 100644 Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/frame_wallmount.yml create mode 100644 Resources/Prototypes/_NF/Recipes/Construction/Graphs/machines/computer_wallmount.yml create mode 100644 Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/broken_wallmount.png create mode 100644 Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_board_exposed.png create mode 100644 Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_monitor_unscrewed.png create mode 100644 Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_needs_wires.png create mode 100644 Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_no_monitor.png create mode 100644 Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_wallmount.png create mode 100644 Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_wallmount_frame.png create mode 100644 Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/meta.json create mode 100644 Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/screen_mass.png create mode 100644 Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/screen_radar.png diff --git a/Content.Server/Construction/NodeEntities/BoardNodeEntity.cs b/Content.Server/Construction/NodeEntities/BoardNodeEntity.cs index 3e73ffde3e1..1631f846049 100644 --- a/Content.Server/Construction/NodeEntities/BoardNodeEntity.cs +++ b/Content.Server/Construction/NodeEntities/BoardNodeEntity.cs @@ -1,4 +1,4 @@ -using Content.Server.Construction.Components; +using Content.Server._NF.Construction.Components; // Frontier using Content.Shared.Construction; using Content.Shared.Construction.Components; using JetBrains.Annotations; @@ -15,6 +15,7 @@ namespace Content.Server.Construction.NodeEntities; public sealed partial class BoardNodeEntity : IGraphNodeEntity { [DataField("container")] public string Container { get; private set; } = string.Empty; + [DataField] public ComputerType Computer { get; private set; } = ComputerType.Default; // Frontier public string? GetId(EntityUid? uid, EntityUid? userUid, GraphNodeEntityArgs args) { @@ -29,13 +30,22 @@ public sealed partial class BoardNodeEntity : IGraphNodeEntity var board = container.ContainedEntities[0]; - // Frontier - adds tabletop variants - if (args.EntityManager.TryGetComponent(container.Owner, out ConstructionComponent? constructionComponent) - && constructionComponent.Graph == "ComputerTabletop" - && args.EntityManager.TryGetComponent(board, out ComputerTabletopBoardComponent? tabletopComputer)) + // Frontier - alternative computer variants + switch (Computer) { - return tabletopComputer.Prototype; + case ComputerType.Tabletop: + if (args.EntityManager.TryGetComponent(board, out ComputerTabletopBoardComponent? tabletopComputer)) + return tabletopComputer.Prototype; + break; + case ComputerType.Wallmount: + if (args.EntityManager.TryGetComponent(board, out ComputerWallmountBoardComponent? wallmountComputer)) + return wallmountComputer.Prototype; + break; + case ComputerType.Default: + default: + break; } + // End Frontier // There should not be a case where both of these components exist on the same entity... if (args.EntityManager.TryGetComponent(board, out MachineBoardComponent? machine)) @@ -46,4 +56,13 @@ public sealed partial class BoardNodeEntity : IGraphNodeEntity return null; } + + // Frontier: support for multiple computer types + public enum ComputerType : byte + { + Default, // Default machines + Tabletop, + Wallmount + } + // End Frontier } diff --git a/Content.Server/Construction/Components/ComputerTabletopBoardComponent.cs b/Content.Server/_NF/Construction/Components/ComputerTabletopBoardComponent.cs similarity index 90% rename from Content.Server/Construction/Components/ComputerTabletopBoardComponent.cs rename to Content.Server/_NF/Construction/Components/ComputerTabletopBoardComponent.cs index 78e892cd947..680ccdb9819 100644 --- a/Content.Server/Construction/Components/ComputerTabletopBoardComponent.cs +++ b/Content.Server/_NF/Construction/Components/ComputerTabletopBoardComponent.cs @@ -1,7 +1,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; -namespace Content.Server.Construction.Components +namespace Content.Server._NF.Construction.Components { /// /// Used for construction graphs in building tabletop computers. diff --git a/Content.Server/_NF/Construction/Components/ComputerWallmountBoardComponent.cs b/Content.Server/_NF/Construction/Components/ComputerWallmountBoardComponent.cs new file mode 100644 index 00000000000..3d8eba5ad03 --- /dev/null +++ b/Content.Server/_NF/Construction/Components/ComputerWallmountBoardComponent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server._NF.Construction.Components +{ + /// + /// Used for construction graphs in building wallmount computers. + /// + [RegisterComponent] + public sealed partial class ComputerWallmountBoardComponent : Component + { + [DataField("prototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? Prototype { get; private set; } + } +} diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml index 79e3c92278a..df00bb3edac 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml @@ -325,6 +325,8 @@ prototype: ComputerRadar - type: ComputerTabletopBoard # Frontier prototype: ComputerTabletopRadar # Frontier + - type: ComputerWallmountBoard # Frontier + prototype: ComputerWallmountRadar # Frontier - type: entity parent: BaseComputerCircuitboard @@ -337,6 +339,8 @@ prototype: ComputerAdvancedRadar - type: ComputerTabletopBoard # Frontier prototype: ComputerTabletopAdvancedRadar # Frontier + - type: ComputerWallmountBoard # Frontier + prototype: ComputerWallmountAdvancedRadar # Frontier - type: entity parent: BaseComputerCircuitboard diff --git a/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers_wallmount.yml b/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers_wallmount.yml new file mode 100644 index 00000000000..fdc693ee044 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers_wallmount.yml @@ -0,0 +1,26 @@ +# Mass scanner telescreen +- type: entity + parent: [BaseStructureComputerWallmount, ComputerRadar] + id: ComputerWallmountRadar + components: + - type: Sprite + drawdepth: WallMountedItems + sprite: _NF/Structures/Machines/computer_wallmount.rsi + layers: + - map: ["computerLayerBody"] + state: computer_wallmount + - map: ["computerLayerScreen"] + state: screen_mass + +- type: entity + parent: [BaseStructureComputerWallmount, ComputerAdvancedRadar] + id: ComputerWallmountAdvancedRadar + components: + - type: Sprite + drawdepth: WallMountedItems + sprite: _NF/Structures/Machines/computer_wallmount.rsi + layers: + - map: ["computerLayerBody"] + state: computer_wallmount + - map: ["computerLayerScreen"] + state: screen_radar diff --git a/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/frame_wallmount.yml b/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/frame_wallmount.yml new file mode 100644 index 00000000000..0973d8b9402 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/frame_wallmount.yml @@ -0,0 +1,76 @@ +- type: entity + id: BaseStructureComputerWallmount + parent: [BaseStructureWallmount, BaseStructure] + suffix: Wallmount + abstract: true + components: + - type: Anchorable + - type: InteractionOutline + - type: Construction + graph: ComputerWallmount + node: wallmount computer + - type: Sprite + sprite: _NF/Structures/Machines/computer_wallmount.rsi + drawdepth: WallMountedItems + layers: + - map: [ "computerLayerBody" ] + sprite: _NF/Structures/Machines/computer_wallmount.rsi + state: computer_wallmount + - map: [ "computerLayerScreen" ] + sprite: _NF/Structures/Machines/computer_wallmount.rsi + state: screen_generic + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Electronic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: GlassBreak + - !type:ChangeConstructionNodeBehavior + node: monitorBroken + - !type:DoActsBehavior + acts: ["Destruction"] + - type: StaticPrice + price: 100 + +- type: entity + parent: BaseStructureComputerWallmount + name: computer + id: ComputerWallmountFrame + components: + - type: Construction + graph: ComputerWallmount + node: frameUnsecured + containers: + - board + - type: Sprite + drawdepth: WallMountedItems + sprite: _NF/Structures/Machines/computer_wallmount.rsi + layers: + - state: computer_wallmount_frame + map: [ "enum.ConstructionVisuals.Layer" ] + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ConstructionVisuals.Key: + enum.ConstructionVisuals.Layer: + frameUnsecured: { state: computer_wallmount_frame } + boardUnsecured: { state: computer_board_exposed } + missingWires: { state: computer_needs_wires } + monitorMissing: { state: computer_no_monitor } + monitorUnsecured: { state: computer_monitor_unscrewed } + +- type: entity + parent: [BaseStructureWallmount, ComputerBroken] + id: ComputerWallmountBroken + suffix: Wallmount + components: + - type: Sprite + drawdepth: WallMountedItems + sprite: _NF/Structures/Machines/computer_wallmount.rsi + state: broken_wallmount diff --git a/Resources/Prototypes/_NF/Recipes/Construction/Graphs/machines/computer_tabletop.yml b/Resources/Prototypes/_NF/Recipes/Construction/Graphs/machines/computer_tabletop.yml index 5cc27fc1e69..107a04620f6 100644 --- a/Resources/Prototypes/_NF/Recipes/Construction/Graphs/machines/computer_tabletop.yml +++ b/Resources/Prototypes/_NF/Recipes/Construction/Graphs/machines/computer_tabletop.yml @@ -36,7 +36,7 @@ amount: 5 - !type:DeleteEntity {} steps: - - tool: Welding + - tool: Screwing doAfter: 2 - node: boardUnsecured @@ -119,7 +119,9 @@ - tool: Prying - node: tabletop computer - entity: !type:BoardNodeEntity { container: board } + entity: !type:BoardNodeEntity + container: board + computer: Tabletop edges: - to: monitorUnsecured conditions: diff --git a/Resources/Prototypes/_NF/Recipes/Construction/Graphs/machines/computer_wallmount.yml b/Resources/Prototypes/_NF/Recipes/Construction/Graphs/machines/computer_wallmount.yml new file mode 100644 index 00000000000..a8b403facc6 --- /dev/null +++ b/Resources/Prototypes/_NF/Recipes/Construction/Graphs/machines/computer_wallmount.yml @@ -0,0 +1,141 @@ +- type: constructionGraph + id: ComputerWallmount + start: start + graph: + - node: start + edges: + - to: frameUnsecured + completed: + - !type:SetAnchor + value: true # Explicitly true - should always be anchored + steps: + - material: Steel + amount: 5 + doAfter: 2.5 + + - node: frameUnsecured + actions: + - !type:AppearanceChange + entity: ComputerWallmountFrame + edges: + - to: boardUnsecured + steps: + - component: ComputerWallmountBoard + store: board + name: any wallmount computer circuit board + icon: + sprite: "Objects/Misc/module.rsi" + state: "id_mod" + + - to: start + completed: + - !type:SpawnPrototype + prototype: SheetSteel1 + amount: 5 + - !type:DeleteEntity {} + steps: + - tool: Screwing + doAfter: 2 + + - node: boardUnsecured + actions: + - !type:AppearanceChange + edges: + - to: missingWires + conditions: + - !type:EntityAnchored {} + steps: + - tool: Screwing + + - to: frameUnsecured + conditions: + - !type:EntityAnchored { } + completed: + - !type:EmptyAllContainers + emptyAtUser: true # Try and prevent stuff going out into space + steps: + - tool: Prying + + - node: missingWires + actions: + - !type:AppearanceChange + edges: + - to: monitorMissing + conditions: + - !type:EntityAnchored {} + steps: + - material: Cable + amount: 5 + + - to: boardUnsecured + conditions: + - !type:EntityAnchored { } + steps: + - tool: Screwing + + - node: monitorMissing + entity: ComputerWallmountFrame + actions: + - !type:AppearanceChange + edges: + - to: monitorUnsecured + conditions: + - !type:EntityAnchored {} + steps: + - material: Glass + amount: 2 + + - to: missingWires + conditions: + - !type:EntityAnchored { } + completed: + - !type:SpawnPrototype + prototype: CableApcStack1 + amount: 5 + steps: + - tool: Cutting + + - node: monitorUnsecured + actions: + - !type:AppearanceChange + entity: ComputerWallmountFrame + edges: + - to: wallmount computer + conditions: + - !type:EntityAnchored {} + steps: + - tool: Screwing + + - to: monitorMissing + conditions: + - !type:EntityAnchored {} + completed: + - !type:SpawnPrototype + prototype: SheetGlass1 + amount: 2 + steps: + - tool: Prying + + - node: wallmount computer + entity: !type:BoardNodeEntity + container: board + computer: Wallmount + edges: + - to: monitorUnsecured + steps: + - tool: Prying + doAfter: 1 + + - node: monitorBroken + entity: ComputerWallmountBroken + edges: + - to: monitorMissing + conditions: + - !type:EntityAnchored {} + completed: + - !type:SpawnPrototype + prototype: ShardGlass + amount: 2 + steps: + - tool: Prying + doAfter: 2 diff --git a/Resources/Prototypes/_NF/Recipes/Construction/machines.yml b/Resources/Prototypes/_NF/Recipes/Construction/machines.yml index ff303800b5a..76978b6fef4 100644 --- a/Resources/Prototypes/_NF/Recipes/Construction/machines.yml +++ b/Resources/Prototypes/_NF/Recipes/Construction/machines.yml @@ -11,3 +11,20 @@ icon: sprite: _NF/Structures/Machines/computer_tabletop.rsi state: computer_tabletop_frame + +- type: construction + name: computer (wallmount) + id: ConstructionComputerWallmount + graph: ComputerWallmount + startNode: start + targetNode: wallmount computer + category: construction-category-machines + description: A frame used to construct anything with a computer circuitboard. + icon: + sprite: _NF/Structures/Machines/computer_wallmount.rsi + state: computer_wallmount_frame + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: true + conditions: + - !type:WallmountCondition {} diff --git a/Resources/Prototypes/_NF/tags.yml b/Resources/Prototypes/_NF/tags.yml index 21b551ec9a8..bba0f16bf41 100644 --- a/Resources/Prototypes/_NF/tags.yml +++ b/Resources/Prototypes/_NF/tags.yml @@ -69,19 +69,19 @@ - type: Tag id: SalvageOutpost - + - type: Tag id: HoverbikeKeys - + - type: Tag id: WeaponRifleNovaliteC1 - + - type: Tag id: MagazineNovaliteC1 - type: Tag id: TrackingDart - + - type: Tag id: SpeedLoaderRifleHeavy @@ -96,7 +96,7 @@ - type: Tag id: BrassKnucklesNF - + - type: Tag id: MaterialHideRosyMothroach diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/broken_wallmount.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/broken_wallmount.png new file mode 100644 index 0000000000000000000000000000000000000000..e6faf190db97a0148a944454297c7a887c093e68 GIT binary patch literal 881 zcmV-%1CIQOP)fFDZ*Bkpc$`yK zaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3KBS zBsC|sIJqb_H7`kti!&v&s2HS`i!-e#F*g;&Hss>W$HF{anD-001*e9~A>c zt9}3g0$NE#K~z|U?N{B_n;;MrMS;SK2J`-}+Sw)jqJXC9cY4!ib74+|*&mjjN!NYs zA2LGTLZuoZzYKX4?DaY0Xq*VMa}^q)2qYleTn!vHfn%v+nq=X z;im!sVIe`EC`y?Q8S;w3AbCpn`+cJrJ;e$Dz!Zo!c)-(^0NUbLFYmbyR7C)M9g zq87kSI%Hb8UC=d00PWCQycN#5U+LWlMkoE9k2sX4+`YUlYP98L>&xqSd0&+-FMD4C zys+=in~#0$KeF#$6}7vmHFf@m2h~4kMNM4YW8{qbbR6*D=8*;7ndYSl0NgJh)j(o^ zz^ujtcV627w;AM-nXL(sx!H%)2-aEXD>ir~N5IoIUIG|qmlJ^DQ3LYkEQNK>6wXoB z0NPL{o@lQCC<(!s8ep_S;Gj--kwOHyCit;K4d9SJ-cxdC5lkrJ#`GR5eUbS+vcTBL zV&zE$F2Mu*_)_6y{`Db2;>6P;F5Cy3$PZfs^hV@ex@aWyLCi9aOq~My;BiJ50ERn} zPiv}+C^C(O)_ET+^Ta}p^;)}?1s($I5+G}oHb7Qc=z~hgcF#tV3)ha|OG2E?1CD?% zi`1Y2@aqqQ9-9+M=D|~@)cWGpOq7YV`&aS@Q}ZKG{+j&+;ruVzok+Uw00000NkvXX Hu0mjfXSj#> literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_board_exposed.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_board_exposed.png new file mode 100644 index 0000000000000000000000000000000000000000..2b46b31ac8c0161d307b48d2887ee149f8ae527b GIT binary patch literal 1565 zcmV+&2IBdNP) z1RTiO;Gz~oe9NIaIFV5TQi3S8aqY#GcVIz1?9OU;wYxL3>ojh=9}q$_yF2sV&b*m< z?+HjrNl8ih|8nh9cOZ=Mg4VyRXZ_J_hRT__3Y`e!;r)96fOh*W41?jEF^mubN(oA( ziJ>|GL-o&|zldxjQ~~1!tv^D;<FgnF0VD9=?WQ80htSL)VUtjRDa5ag@+( z9sqzNApdT+-vWR~cz1oXc>qnD7Ct|;LtFuc(w9SZqPO7Y=Jg!1+0XIwulv%YV7#F9 z=jZ0|=FM+7KGS7x32b+A@-_fqV{0q4?Z_#>X}sEx)d>Ko)s}H|^n0v(>-8PzvpO1! zMO1e?Xv`K-ebNES09tn67OgV=4Zx|-t?giG=}}}GpUHNH5Tg9y93H+_mECC*0IItk ztk4xycL&0+-x_u5P`1ATpbV_DQJ@S@AHt9t0fZ1_GE$d1n5GFrh&??FrF%JyG3591 zz#g!MHRO?Z>V5#M-+R8B_6BtcV>pl zRab#drxn?b+G~}B5aMV*$S|tVc(os>_?It#iM+2~-$AXmES!Fk3dm-&7;!Z&I|6h) zp5+dLx2ZA(-P2D*goYeKYt~=9DWPgNeEtMuvukU~m zqAZk*5t79{tzeR)3Ykd0gXQ+N;i98I= z&&>hAr5sA44kSTsfBVf0dcD5_+f}hY-S#`28`nbHj_lBQLF+%fe{bkW>hB0Jd@SV# zOw*?E?D-2Nf53P_>lX_*aB^}oRHt$b=R_$$YImV&)6S+MY8Bx1{yJ5x&T9Rj_j7Js z0JuP>>p!7}>o-dI!VwVNRe9n#LsC*wQc_Y8iA z4<3B)`R#UtB~ix5dmqk((ovZL)r2RF8yfzl!?wn(QF=oQUZNe2g*Qx!*a52Zaxlu82|#~ia|(+ z$2na1u#lA##)jn`GK~1HY_7cHGkp;Dw#(h^yFaS217!sO1L1>0Rc?PoL+gL1m z%0-k)6QGm|uM;XjHo?hR?#hGC8U{>jR3EH>Zi0RYN_=_UI@WJa%)4NwxIhPP}mAZr}Y|1?khEOx7l24EYT!MRjuN zHZCsCl{@67RGM&d6a03CCr$Z2&{$pCEBn_^&%=Q&Lh=J{f-lv1Dd4>PB|@ P00000NkvXXu0mjf_p0NA literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_monitor_unscrewed.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_monitor_unscrewed.png new file mode 100644 index 0000000000000000000000000000000000000000..550e97bed108a7e4f611c772e977b90d2a598f4b GIT binary patch literal 1353 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_wallmount.png b/Resources/Textures/_NF/Structures/Machines/computer_wallmount.rsi/computer_wallmount.png new file mode 100644 index 0000000000000000000000000000000000000000..b96cd3ca6df39792a853891baf32d02e84f99efb GIT binary patch literal 1256 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 Date: Mon, 11 Nov 2024 19:01:26 +0000 Subject: [PATCH 17/45] Automatic Changelog (#2351) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 9f951967c93..004ffa7257b 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5249,3 +5249,9 @@ Entries: message: The cutter machine now accepts gold and silver ingots. id: 5494 time: '2024-11-10T20:50:24.0000000+00:00' +- author: Tych0theSynth + changes: + - type: Add + message: Added wallmount mass scanner and radar telescreens. + id: 5495 + time: '2024-11-11T19:01:01.0000000+00:00' From 1ed268b210c301e767bbe5b8dc8032a92540746b Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Mon, 11 Nov 2024 15:24:27 -0500 Subject: [PATCH 18/45] Fix roundstart janitor access, no maid smite (#2392) * Fix roundstart janitor access, no maid smite * revert maid PDA change --- .../Administration/Systems/AdminVerbSystem.Smites.cs | 3 +++ Resources/Prototypes/Entities/Objects/Devices/pda.yml | 3 ++- .../Entities/Objects/Misc/identification_cards.yml | 1 + Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml | 2 +- .../Objects/Devices/Misc/identification_cards.yml | 7 +++++++ Resources/Prototypes/_NF/Entities/Objects/Devices/pda.yml | 8 ++++++++ Resources/Prototypes/_NF/Roles/Jobs/Civilian/janitor.yml | 2 +- 7 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs index 30256e1cac5..a50b75cef09 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs @@ -563,6 +563,8 @@ private void AddSmiteVerbs(GetVerbsEvent args) }; args.Verbs.Add(cluwne); + // Frontier: remove maid smite due to weird ID perms + /* Verb maiden = new() { Text = "admin-smite-remove-gravity-name", @@ -581,6 +583,7 @@ private void AddSmiteVerbs(GetVerbsEvent args) Message = Loc.GetString("admin-smite-maid-description") }; args.Verbs.Add(maiden); + */ } Verb angerPointingArrows = new() diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index 742f20835a5..79ba538060c 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -505,6 +505,7 @@ id: JanitorPDA name: janitor PDA description: Smells like bleach. + categories: [ HideSpawnMenu ] # Frontier components: - type: Pda id: JanitorIDCard @@ -1180,4 +1181,4 @@ insertSound: /Audio/Machines/id_insert.ogg whitelist: components: - - Cartridge \ No newline at end of file + - Cartridge diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index 3a0bb18db39..2dd94ad883e 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -285,6 +285,7 @@ parent: IDCardStandard id: JanitorIDCard name: janitor ID card + categories: [ HideSpawnMenu ] # Frontier components: - type: Sprite layers: diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml b/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml index f6fcb81e870..94ca69c91e7 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/janitor.yml @@ -35,4 +35,4 @@ gloves: ClothingHandsGlovesJanitor head: ClothingHeadHatCatEars ears: ClothingHeadsetService - belt: ClothingBeltJanitorFilled \ No newline at end of file + belt: ClothingBeltJanitorFilled diff --git a/Resources/Prototypes/_NF/Entities/Objects/Devices/Misc/identification_cards.yml b/Resources/Prototypes/_NF/Entities/Objects/Devices/Misc/identification_cards.yml index b1d81f47caa..e1326ff1a18 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Devices/Misc/identification_cards.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Devices/Misc/identification_cards.yml @@ -197,6 +197,13 @@ - state: default - state: idvalet +- type: entity + parent: JanitorIDCard + id: NFJanitorIDCard + components: + - type: PresetIdCard + job: NFJanitor + - type: entity parent: PassengerIDCard id: ContractorIDCard diff --git a/Resources/Prototypes/_NF/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/_NF/Entities/Objects/Devices/pda.yml index 74db6b4e187..a95f1bd2da4 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Devices/pda.yml @@ -498,3 +498,11 @@ - type: Pda id: ContractorIDCard state: pda-clear + +- type: entity + parent: JanitorPDA + id: NFJanitorPDA + components: + - type: Pda + id: NFJanitorIDCard + state: pda-janitor diff --git a/Resources/Prototypes/_NF/Roles/Jobs/Civilian/janitor.yml b/Resources/Prototypes/_NF/Roles/Jobs/Civilian/janitor.yml index 653517bf4c9..61c31c006ab 100644 --- a/Resources/Prototypes/_NF/Roles/Jobs/Civilian/janitor.yml +++ b/Resources/Prototypes/_NF/Roles/Jobs/Civilian/janitor.yml @@ -33,7 +33,7 @@ id: NFJanitorGear equipment: shoes: ClothingShoesGaloshes - id: JanitorPDA + id: NFJanitorPDA belt: ClothingBeltJanitorFilled storage: back: From affb937c1262255f6fe481a7ddec8857ad4e0c9a Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Mon, 11 Nov 2024 20:24:53 +0000 Subject: [PATCH 19/45] Automatic Changelog (#2392) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 004ffa7257b..e6941fe7cd8 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5255,3 +5255,9 @@ Entries: message: Added wallmount mass scanner and radar telescreens. id: 5495 time: '2024-11-11T19:01:01.0000000+00:00' +- author: whatston3 + changes: + - type: Fix + message: Fixed access for round start Janitors. + id: 5496 + time: '2024-11-11T20:24:28.0000000+00:00' From 860fdd8cd0ec660601aa6ed15f0b8b7057c9e598 Mon Sep 17 00:00:00 2001 From: ErhardSteinhauer <65374927+ErhardSteinhauer@users.noreply.github.com> Date: Mon, 11 Nov 2024 23:30:09 +0300 Subject: [PATCH 20/45] Add xeno spawn markers (#2390) * xeno spawn markers * Fixed xeno spawner, less cult --------- Co-authored-by: Dvir --- .../Prototypes/Entities/Mobs/NPCs/xeno.yml | 9 + .../Conditional/mobs_hostile_xeno.yml | 165 ++++++++++++++++++ .../Markers/Spawners/untimedAISpawners.yml | 86 --------- .../_NF/Procedural/chromite_vgroid.yml | 20 +-- .../Prototypes/_NF/Procedural/snow_vgroid.yml | 36 +--- Resources/_NF/migration.yml | 6 + 6 files changed, 193 insertions(+), 129 deletions(-) create mode 100644 Resources/Prototypes/_NF/Entities/Markers/Spawners/Conditional/mobs_hostile_xeno.yml delete mode 100644 Resources/Prototypes/_NF/Entities/Markers/Spawners/untimedAISpawners.yml diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml index 83ed657291f..17cc2bda673 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml @@ -4,6 +4,7 @@ id: MobXeno parent: [NFMobRestrictions, SimpleSpaceMobBase] # Frontier: add NFMobRestrictions description: They mostly come at night. Mostly. + categories: [ HideSpawnMenu ] # Frontier components: - type: Insulated - type: CombatMode @@ -127,6 +128,7 @@ name: praetorian parent: MobXeno id: MobXenoPraetorian + categories: [ HideSpawnMenu ] # Frontier components: - type: Sprite drawdepth: Mobs @@ -160,6 +162,7 @@ name: drone parent: MobXeno id: MobXenoDrone + categories: [ HideSpawnMenu ] # Frontier components: - type: Sprite drawdepth: Mobs @@ -197,6 +200,7 @@ name: queen parent: MobXeno id: MobXenoQueen + categories: [ HideSpawnMenu ] # Frontier components: - type: Sprite drawdepth: Mobs @@ -236,6 +240,7 @@ name: ravager parent: MobXeno id: MobXenoRavager + categories: [ HideSpawnMenu ] # Frontier components: - type: Sprite drawdepth: Mobs @@ -273,6 +278,7 @@ name: runner parent: MobXeno id: MobXenoRunner + categories: [ HideSpawnMenu ] # Frontier components: - type: Sprite drawdepth: Mobs @@ -303,6 +309,7 @@ name: rouny parent: MobXenoRunner id: MobXenoRouny + categories: [ HideSpawnMenu ] # Frontier components: - type: Sprite drawdepth: Mobs @@ -318,6 +325,7 @@ name: spitter parent: MobXeno id: MobXenoSpitter + categories: [ HideSpawnMenu ] # Frontier components: - type: Sprite drawdepth: Mobs @@ -366,6 +374,7 @@ parent: [NFMobRestrictions, SimpleSpaceMobBase] # Frontier: add NFMobRestrictions id: MobPurpleSnake description: A menacing purple snake from Kepler-283c. + categories: [ HideSpawnMenu ] # Frontier components: - type: Sprite drawdepth: Mobs diff --git a/Resources/Prototypes/_NF/Entities/Markers/Spawners/Conditional/mobs_hostile_xeno.yml b/Resources/Prototypes/_NF/Entities/Markers/Spawners/Conditional/mobs_hostile_xeno.yml new file mode 100644 index 00000000000..b72b65ebd84 --- /dev/null +++ b/Resources/Prototypes/_NF/Entities/Markers/Spawners/Conditional/mobs_hostile_xeno.yml @@ -0,0 +1,165 @@ +- type: entity + id: SpawnMobXenoBurrowerExpeditions + name: xeno burrower spawner + parent: MarkerBase + suffix: AI, Hostile + components: + - type: Sprite + layers: + - state: red + - state: ai + - sprite: Mobs/Aliens/Xenos/burrower.rsi + state: running + - type: ConditionalSpawner + prototypes: + - MobXenoBurrowerExpeditions + +- type: entity + id: SpawnMobXenoDroneExpeditions + name: xeno drone spawner + parent: MarkerBase + suffix: AI, Hostile + components: + - type: Sprite + layers: + - state: red + - state: ai + - sprite: Mobs/Aliens/Xenos/drone.rsi + state: running + - type: ConditionalSpawner + prototypes: + - MobXenoDroneExpeditions + +- type: entity + id: SpawnMobXenoPraetorianExpeditions + name: xeno praetorian spawner + parent: MarkerBase + suffix: AI, Hostile + components: + - type: Sprite + layers: + - state: red + - state: ai + - sprite: Mobs/Aliens/Xenos/praetorian.rsi + state: running + - type: ConditionalSpawner + prototypes: + - MobXenoPraetorianExpeditions + +- type: entity + id: SpawnMobXenoRavagerExpeditions + name: xeno ravager spawner + parent: MarkerBase + suffix: AI, Hostile + components: + - type: Sprite + layers: + - state: red + - state: ai + - sprite: Mobs/Aliens/Xenos/ravager.rsi + state: running + - type: ConditionalSpawner + prototypes: + - MobXenoRavagerExpeditions + +- type: entity + id: SpawnMobXenoRunnerExpeditions + name: xeno runner spawner + parent: MarkerBase + suffix: AI, Hostile + components: + - type: Sprite + layers: + - state: red + - state: ai + - sprite: Mobs/Aliens/Xenos/runner.rsi + state: running + - type: ConditionalSpawner + prototypes: + - MobXenoRunnerExpeditions + +- type: entity + id: SpawnMobXenoSpitterExpeditions + name: xeno spitter spawner + parent: MarkerBase + suffix: AI, Hostile + components: + - type: Sprite + layers: + - state: red + - state: ai + - sprite: Mobs/Aliens/Xenos/spitter.rsi + state: running + - type: ConditionalSpawner + prototypes: + - MobXenoSpitterExpeditions + +- type: entity + id: SpawnMobXenoQueenDungeon + name: xeno queen spawner + parent: MarkerBase + suffix: AI, Hostile + components: + - type: Sprite + layers: + - state: red + - state: ai + - sprite: Mobs/Aliens/Xenos/queen.rsi + state: running + - type: ConditionalSpawner + prototypes: + - MobXenoQueenDungeon + +- type: entity + name: xeno spawner + suffix: AI, Hostile, T1 + parent: MarkerBase + id: SpawnMobXenoT1 + components: + - type: Sprite + layers: + - state: red + - sprite: Mobs/Aliens/Xenos/drone.rsi + state: crit + - state: ai + - type: RandomSpawner + prototypes: + - MobXenoBurrowerExpeditions + - MobXenoDroneExpeditions + rarePrototypes: + - MobXenoPraetorianExpeditions + - MobXenoRunnerExpeditions + - MobXenoSpitterExpeditions + rareChance: 0.10 + +- type: entity + suffix: AI, Hostile, T2 + parent: SpawnMobXenoT1 + id: SpawnMobXenoT2 + components: + - type: RandomSpawner + prototypes: + - MobXenoBurrowerExpeditions + - MobXenoPraetorianExpeditions + - MobXenoDroneExpeditions + - MobXenoRunnerExpeditions + - MobXenoSpitterExpeditions + rarePrototypes: + - MobXenoRavagerExpeditions + rareChance: 0.10 + +- type: entity + suffix: AI, Hostile, T3 + parent: SpawnMobXenoT1 + id: SpawnMobXenoT3 + components: + - type: RandomSpawner + prototypes: + - MobXenoPraetorianExpeditions + - MobXenoRunnerExpeditions + - MobXenoSpitterExpeditions + - MobXenoRavagerExpeditions + rarePrototypes: + - MobXenoDroneExpeditions + - MobXenoBurrowerExpeditions + rareChance: 0.10 \ No newline at end of file diff --git a/Resources/Prototypes/_NF/Entities/Markers/Spawners/untimedAISpawners.yml b/Resources/Prototypes/_NF/Entities/Markers/Spawners/untimedAISpawners.yml deleted file mode 100644 index 55699c7c186..00000000000 --- a/Resources/Prototypes/_NF/Entities/Markers/Spawners/untimedAISpawners.yml +++ /dev/null @@ -1,86 +0,0 @@ -- type: entity - name: Xeno Spawner - suffix: Easy - id: XenoAISpawnerEasy - parent: MarkerBase - components: - - type: Sprite - layers: - - state: red - - sprite: Mobs/Aliens/Xenos/drone.rsi - state: crit - - state: ai - - type: RandomSpawner - prototypes: - - MobXeno - - MobXenoDrone - rarePrototypes: - - MobXenoPraetorian - - MobXenoRunner - - MobXenoSpitter - rareChance: 0.10 - -- type: entity - name: Xeno Spawner - suffix: Medium - id: XenoAISpawnerMedium - parent: MarkerBase - components: - - type: Sprite - layers: - - state: red - - sprite: Mobs/Aliens/Xenos/praetorian.rsi - state: crit - - state: ai - - type: RandomSpawner - prototypes: - - MobXeno - - MobXenoPraetorian - - MobXenoDrone - - MobXenoRunner - - MobXenoSpitter - rarePrototypes: - - MobXenoRavager - - MobXenoRouny - rareChance: 0.10 - -- type: entity - name: Xeno Spawner - suffix: Hard - id: XenoAISpawnerHard - parent: MarkerBase - components: - - type: Sprite - layers: - - state: red - - sprite: Mobs/Aliens/Xenos/ravager.rsi - state: crit - - state: ai - - type: RandomSpawner - prototypes: - - MobXenoPraetorian - - MobXenoRunner - - MobXenoSpitter - - MobXenoRavager - rarePrototypes: - - MobXenoQueen - - MobXenoRouny - - MobXenoDrone - - MobXeno - rareChance: 0.10 - -- type: entity - name: Xeno Spawner - suffix: Queen - id: XenoAISpawnerQueen - parent: MarkerBase - components: - - type: Sprite - layers: - - state: red - - sprite: Mobs/Aliens/Xenos/queen.rsi - state: crit - - state: ai - - type: RandomSpawner - prototypes: - - MobXenoQueen diff --git a/Resources/Prototypes/_NF/Procedural/chromite_vgroid.yml b/Resources/Prototypes/_NF/Procedural/chromite_vgroid.yml index bd45dd679bb..e87f88302e4 100644 --- a/Resources/Prototypes/_NF/Procedural/chromite_vgroid.yml +++ b/Resources/Prototypes/_NF/Procedural/chromite_vgroid.yml @@ -237,32 +237,32 @@ table: !type:NestedSelector tableId: SalvageEquipmentSpawnerValuable - !type:MobsDunGen - minCount: 2 - maxCount: 4 + minCount: 1 + maxCount: 2 groups: - id: SpawnMobBloodCultistPriest amount: 1 - !type:MobsDunGen - minCount: 2 - maxCount: 4 + minCount: 1 + maxCount: 2 groups: - id: SpawnMobBloodCultistAcolyte amount: 1 - !type:MobsDunGen - minCount: 2 - maxCount: 4 + minCount: 1 + maxCount: 2 groups: - id: SpawnMobBloodCultistZealotMelee amount: 1 - !type:MobsDunGen - minCount: 2 - maxCount: 4 + minCount: 1 + maxCount: 2 groups: - id: SpawnMobBloodCultistZealotRanged amount: 1 - !type:MobsDunGen - minCount: 2 - maxCount: 4 + minCount: 1 + maxCount: 2 groups: - id: SpawnMobBloodCultistCaster amount: 1 diff --git a/Resources/Prototypes/_NF/Procedural/snow_vgroid.yml b/Resources/Prototypes/_NF/Procedural/snow_vgroid.yml index 4e700f9459f..9fb72dcd07a 100644 --- a/Resources/Prototypes/_NF/Procedural/snow_vgroid.yml +++ b/Resources/Prototypes/_NF/Procedural/snow_vgroid.yml @@ -251,40 +251,10 @@ table: !type:NestedSelector tableId: SalvageEquipmentSpawnerValuable - !type:MobsDunGen - minCount: 2 - maxCount: 4 + minCount: 8 + maxCount: 15 groups: - - id: MobXenoBurrowerExpeditions - amount: 1 - - !type:MobsDunGen - minCount: 2 - maxCount: 4 - groups: - - id: MobXenoDroneExpeditions - amount: 1 - - !type:MobsDunGen - minCount: 2 - maxCount: 4 - groups: - - id: MobXenoPraetorianExpeditions - amount: 1 - - !type:MobsDunGen - minCount: 2 - maxCount: 4 - groups: - - id: MobXenoRavagerExpeditions - amount: 1 - - !type:MobsDunGen - minCount: 2 - maxCount: 4 - groups: - - id: MobXenoRunnerExpeditions - amount: 1 - - !type:MobsDunGen - minCount: 2 - maxCount: 4 - groups: - - id: MobXenoSpitterExpeditions + - id: SpawnMobXenoT2 amount: 1 #- type: dungeonConfig diff --git a/Resources/_NF/migration.yml b/Resources/_NF/migration.yml index 0633ecf091f..5c3d2ac9690 100644 --- a/Resources/_NF/migration.yml +++ b/Resources/_NF/migration.yml @@ -93,3 +93,9 @@ SpawnPointDetectiveNF: NFSpawnPointDetective # 2024-11-09 WarpPointShip: WarpPoint + +# 2024-11-11 Xeno +XenoAISpawnerEasy: SpawnMobXenoT1 +XenoAISpawnerMedium: SpawnMobXenoT2 +XenoAISpawnerHard: SpawnMobXenoT3 +XenoAISpawnerQueen: SpawnMobXenoQueenDungeon \ No newline at end of file From 5b9085cb129dcdfc850082759a0c246136c4a863 Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Mon, 11 Nov 2024 23:56:35 -0500 Subject: [PATCH 21/45] Pills give no extra materials (#2396) --- Resources/Prototypes/Entities/Objects/Specific/chemistry.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index dbf545b8862..6011798db37 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -462,7 +462,7 @@ - type: entity name: pill - parent: [BaseItem, RecyclableItemOrganicTiny] # Frontier: added RecyclableItemOrganicTiny + parent: [BaseItem, RecyclableItemNoMats] # Frontier: added RecyclableItemNoMats id: Pill description: It's not a suppository. components: From ee855a8162819288e6000c24f4d0c51e25928977 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Tue, 12 Nov 2024 04:57:03 +0000 Subject: [PATCH 22/45] Automatic Changelog (#2396) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index e6941fe7cd8..39cd4550c36 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5261,3 +5261,9 @@ Entries: message: Fixed access for round start Janitors. id: 5496 time: '2024-11-11T20:24:28.0000000+00:00' +- author: whatston3 + changes: + - type: Remove + message: Pills no longer give biomass on recycling. + id: 5497 + time: '2024-11-12T04:56:35.0000000+00:00' From b55ea2a68092dfa1b00b233ca6f935b2a0a16ca7 Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Tue, 12 Nov 2024 13:25:03 +0200 Subject: [PATCH 23/45] Arbitrage fixups (#2391) --- .../DeltaV/Harpy/HarpyVisualsSystem.cs | 9 +++-- .../Components/HarpyHideWingsComponent.cs | 11 +++++ Resources/Prototypes/DeltaV/tags.yml | 8 ++-- .../Entities/Clothing/Hands/colored.yml | 6 +-- .../Entities/Clothing/Head/eva-helmets.yml | 6 +-- .../Entities/Clothing/Head/welding.yml | 4 +- .../OuterClothing/base_clothingouter.yml | 14 +++---- .../Clothing/OuterClothing/hardsuits.yml | 7 ++-- .../Clothing/OuterClothing/softsuits.yml | 3 ++ .../Entities/Clothing/Shoes/magboots.yml | 6 +-- .../Objects/Devices/encryption_keys.yml | 5 +-- .../Entities/Objects/Devices/radio.yml | 2 - .../Entities/Objects/Misc/fluff_lights.yml | 12 +----- .../Objects/Misc/identification_cards.yml | 2 +- .../Entities/Objects/Power/powercells.yml | 2 - .../Objects/Specific/Salvage/ore_bag.yml | 4 +- .../Entities/Objects/Specific/atmos.yml | 4 +- .../Objects/Tools/airlock_painter.yml | 0 .../Entities/Objects/Tools/cable_coils.yml | 6 +-- .../Entities/Objects/Tools/flare.yml | 2 - .../Entities/Objects/Tools/flashlights.yml | 2 +- .../Entities/Objects/Tools/spray_painter.yml | 2 +- .../Entities/Objects/Tools/tools.yml | 18 ++++----- .../Entities/Objects/Tools/welders.yml | 4 +- .../Objects/Weapons/Guns/Basic/pka.yml | 5 +-- .../Entities/Objects/Weapons/Melee/mining.yml | 40 +++++++------------ .../Entities/Structures/Machines/lathe.yml | 18 +-------- .../Structures/Machines/vending_machines.yml | 2 + .../VendingMachines/Inventories/astrovend.yml | 8 ---- .../VendingMachines/Inventories/salvage.yml | 2 - .../Clothing/OuterClothing/hardsuits.yml | 2 - .../Clothing/OuterClothing/softsuits.yml | 7 ---- .../Clothing/base_recyclable_clothing.yml | 19 +++++++++ .../_NF/Entities/Objects/Tools/flare.yml | 2 +- .../Entities/Structures/Machines/lathe.yml | 28 ------------- .../_NF/Recipes/Lathes/clothing-eva.yml | 12 +++--- 36 files changed, 110 insertions(+), 174 deletions(-) create mode 100644 Content.Shared/_NF/Clothing/Components/HarpyHideWingsComponent.cs delete mode 100644 Resources/Prototypes/Entities/Objects/Tools/airlock_painter.yml diff --git a/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs b/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs index f75fcee8d42..cfe44016444 100644 --- a/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs +++ b/Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs @@ -1,6 +1,7 @@ using Content.Shared.Inventory.Events; using Content.Shared.Tag; using Content.Shared.Humanoid; +using Content.Shared._NF.Clothing.Components; // Frontier namespace Content.Shared.DeltaV.Harpy; @@ -9,8 +10,8 @@ public sealed class HarpyVisualsSystem : EntitySystem [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly SharedHumanoidAppearanceSystem _humanoidSystem = default!; - [ValidatePrototypeId] - private const string HarpyWingsTag = "HidesHarpyWings"; + // [ValidatePrototypeId] // Frontier + // private const string HarpyWingsTag = "HidesHarpyWings"; // Frontier public override void Initialize() { @@ -22,7 +23,7 @@ public override void Initialize() private void OnDidEquipEvent(EntityUid uid, HarpySingerComponent component, DidEquipEvent args) { - if (args.Slot == "outerClothing" && _tagSystem.HasTag(args.Equipment, HarpyWingsTag)) + if (args.Slot == "outerClothing" && HasComp(args.Equipment)) // Frontier: Swap tag to comp { _humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.RArm, false); _humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.Tail, false); @@ -31,7 +32,7 @@ private void OnDidEquipEvent(EntityUid uid, HarpySingerComponent component, DidE private void OnDidUnequipEvent(EntityUid uid, HarpySingerComponent component, DidUnequipEvent args) { - if (args.Slot == "outerClothing" && _tagSystem.HasTag(args.Equipment, HarpyWingsTag)) + if (args.Slot == "outerClothing" && HasComp(args.Equipment)) // Frontier: Swap tag to comp { _humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.RArm, true); _humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.Tail, true); diff --git a/Content.Shared/_NF/Clothing/Components/HarpyHideWingsComponent.cs b/Content.Shared/_NF/Clothing/Components/HarpyHideWingsComponent.cs new file mode 100644 index 00000000000..474c4e86009 --- /dev/null +++ b/Content.Shared/_NF/Clothing/Components/HarpyHideWingsComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._NF.Clothing.Components; +/// +/// To be used with Harpy to replace the tag +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class HarpyHideWingsComponent : Component +{ + +} diff --git a/Resources/Prototypes/DeltaV/tags.yml b/Resources/Prototypes/DeltaV/tags.yml index 4255950bade..9d1af4678a2 100644 --- a/Resources/Prototypes/DeltaV/tags.yml +++ b/Resources/Prototypes/DeltaV/tags.yml @@ -21,8 +21,8 @@ - type: Tag id: HandLabeler -- type: Tag - id: HidesHarpyWings +#- type: Tag # Frontier - This was replaced with HarpyHideWings comp +# id: HidesHarpyWings # Frontier - This was replaced with HarpyHideWings comp - type: Tag id: MagazinePistolSpecial # For the .38 special ammo and pistol @@ -30,8 +30,8 @@ - type: Tag id: SecDogWearable # allows Laika to wear meson goggles (and more later?) -#- type: Tag # Frontier - This was replaced with HarpyClothing -# id: Skirt # Frontier - This was replaced with HarpyClothing +#- type: Tag # Frontier - This was replaced with HarpyClothing comp +# id: Skirt # Frontier - This was replaced with HarpyClothing comp - type: Tag id: SpeedLoaderSpecial diff --git a/Resources/Prototypes/Entities/Clothing/Hands/colored.yml b/Resources/Prototypes/Entities/Clothing/Hands/colored.yml index b9c40233eac..15b7ae31856 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/colored.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/colored.yml @@ -340,8 +340,8 @@ - type: Fiber fiberMaterial: fibers-insulative fiberColor: fibers-yellow - - type: StaticPrice - price: 45.5 + - type: StaticPrice # Frontier + price: 35 # Frontier # Budget Insulated Gloves - type: entity @@ -377,4 +377,4 @@ suffix: Conducting components: - type: Insulated - coefficient: 5 # zap em good + coefficient: 5 # zap em good \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml index a1b98448b24..eaf35444e21 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/eva-helmets.yml @@ -13,8 +13,6 @@ tags: - HelmetEVA - WhitelistChameleon - - type: StaticPrice - price: 25 #Large EVA Helmet - type: entity @@ -71,8 +69,6 @@ coefficients: Heat: 0.90 Radiation: 0.75 - - type: StaticPrice - price: 25 #Ancient Void Helmet - type: entity @@ -84,4 +80,4 @@ - type: Sprite sprite: Clothing/Head/Helmets/ancientvoidsuit.rsi - type: Clothing - sprite: Clothing/Head/Helmets/ancientvoidsuit.rsi + sprite: Clothing/Head/Helmets/ancientvoidsuit.rsi \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/Head/welding.yml b/Resources/Prototypes/Entities/Clothing/Head/welding.yml index 12ac53d4af0..659c63f343f 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/welding.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/welding.yml @@ -39,8 +39,6 @@ - HamsterWearable - WhitelistChameleon - WeldingMask - - type: StaticPrice - price: 35.5 - type: entity parent: WeldingMaskBase @@ -73,4 +71,4 @@ - type: Sprite sprite: Clothing/Head/Welding/paintedwelding.rsi - type: Clothing - sprite: Clothing/Head/Welding/paintedwelding.rsi + sprite: Clothing/Head/Welding/paintedwelding.rsi \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index f67c671ce3d..790e9bf93af 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -41,7 +41,7 @@ enum.StorageUiKey.Key: type: StorageBoundUserInterface - type: StaticPrice - price: 70 + price: 35 # Frontier 70<35 - type: entity abstract: true @@ -101,7 +101,7 @@ - type: entity abstract: true - parent: [ClothingOuterBase, GeigerCounterClothing, AllowSuitStorageClothing] + parent: [RecyclableItemClothHardsuit, ClothingOuterBase, GeigerCounterClothing, AllowSuitStorageClothing] # Frontier: added RecyclableItemClothHardsuit id: ClothingOuterHardsuitBase name: base hardsuit components: @@ -135,12 +135,6 @@ tags: - Hardsuit - WhitelistChameleon - - HidesHarpyWings #Frontier, needed for Harpies - - type: PhysicalComposition # Frontier - materialComposition: # Frontier - Durathread: 300 # Frontier - Cloth: 100 # Frontier - Steel: 100 # Frontier - type: ProtectedFromStepTriggers slots: WITHOUT_POCKET - type: DamageOnInteractProtection @@ -148,6 +142,10 @@ flatReductions: Heat: 10 # the average lightbulb only does around four damage! slots: OUTERCLOTHING + - type: HarpyHideWings # Frontier, needed for Harpies + - type: StaticPrice # Frontier + price: 20 # Frontier + vendPrice: 1500 # Frontier - type: entity abstract: true diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index d45c9a2ddb6..cfc710e7af8 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -27,8 +27,9 @@ - type: HeldSpeedModifier - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitBasic - - type: StaticPrice - price: 135 + - type: StaticPrice # Frontier + price: 20 # Frontier + vendPrice: 2000 # Frontier #Atmospherics Hardsuit - type: entity @@ -126,8 +127,6 @@ - type: HeldSpeedModifier - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitSpatio - - type: StaticPrice - price: 235 #Salvage Hardsuit - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml index f41fb27bd15..1d223f1b8f7 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/softsuits.yml @@ -14,6 +14,9 @@ - SuitEVA - MonkeyWearable - WhitelistChameleon + - type: StaticPrice # Frontier + price: 20 # Frontier + vendPrice: 1500 # Frontier #Syndicate EVA - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml index a59597213cc..42cdd421375 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml @@ -31,7 +31,7 @@ True: {state: icon-on} False: {state: icon} - type: StaticPrice - price: 200 + price: 100 # Frontier 200<100 - type: Tag tags: - WhitelistChameleon @@ -105,8 +105,8 @@ volume: 0.75 temperature: 293.15 moles: - - 0.153853429 # oxygen - - 0.153853429 # nitrogen + - 0.153853429 # oxygen + - 0.153853429 # nitrogen - type: Item sprite: null size: Normal diff --git a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml index 66a08f9efe4..1caf4ec075e 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml @@ -8,11 +8,10 @@ - type: EncryptionKey - type: Item sprite: Objects/Devices/encryption_keys.rsi - size: Tiny # Frontier - 5 to 2 size - type: Sprite sprite: Objects/Devices/encryption_keys.rsi - - type: StaticPrice - price: 2 + - type: StaticPrice # Frontier + price: 2 # Frontier - type: entity parent: [EncryptionKey, RecyclableItemDeviceTiny] # Frontier: added RecyclableItemDeviceTiny diff --git a/Resources/Prototypes/Entities/Objects/Devices/radio.yml b/Resources/Prototypes/Entities/Objects/Devices/radio.yml index 43648a87563..06ac757de2f 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/radio.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/radio.yml @@ -24,8 +24,6 @@ - type: Tag tags: - Radio - - type: StaticPrice - price: 55 - type: entity name: security radio diff --git a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml index 470409bbbd8..cf2442b27f4 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml @@ -51,8 +51,6 @@ canCollide: false - type: StealTarget stealGroup: LAMP - - type: StaticPrice - price: 5 - type: entity name: lamp @@ -239,8 +237,6 @@ max: 1 - !type:DoActsBehavior acts: [ "Destruction" ] - - type: StaticPrice - price: 75 - type: entity name: broken floodlight @@ -273,7 +269,7 @@ - !type:SpawnEntitiesBehavior spawn: SheetSteel1: - min: 0 # Frontier: 1<0 + min: 1 max: 1 - !type:DoActsBehavior acts: [ "Destruction" ] @@ -286,8 +282,4 @@ bounds: "-0.2, -0.5, 0.2, 0.5" density: 50 mask: - - MachineMask - layer: - - MachineLayer - - type: StaticPrice # Frontier - price: 6 # Frontier: TODO - tests at 6 + - HighImpassable \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index 2dd94ad883e..36573b946de 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -25,7 +25,7 @@ - type: StealTarget stealGroup: IDCard - type: StaticPrice # Frontier - price: 5 # The card need to cost less then the PDA that comes with a card and a pen in it. + price: 5 # Frontier The card need to cost less then the PDA that comes with a card and a pen in it. - type: CargoSellBlacklist # Frontier #IDs with layers diff --git a/Resources/Prototypes/Entities/Objects/Power/powercells.yml b/Resources/Prototypes/Entities/Objects/Power/powercells.yml index 870e28e5cc7..8a73fddc4c0 100644 --- a/Resources/Prototypes/Entities/Objects/Power/powercells.yml +++ b/Resources/Prototypes/Entities/Objects/Power/powercells.yml @@ -120,8 +120,6 @@ - type: MachinePart # Frontier part: PowerCell # Frontier rating: 2 # Frontier - - type: StaticPrice - price: 75 - type: entity id: PowerCellMediumPrinted diff --git a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml index a30333c5048..39af74d4719 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml @@ -25,6 +25,4 @@ tags: - ArtifactFragment - Ore - - type: Dumpable - - type: StaticPrice - price: 55.5 + - type: Dumpable \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Specific/atmos.yml b/Resources/Prototypes/Entities/Objects/Specific/atmos.yml index 77f1a45c2d5..39e379bc2c2 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/atmos.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/atmos.yml @@ -27,8 +27,8 @@ True: { state: working } False: { state: icon } - type: StaticPrice - price: 75 + price: 80 - type: PhysicalComposition materialComposition: Steel: 400 - Glass: 100 + Glass: 100 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Tools/airlock_painter.yml b/Resources/Prototypes/Entities/Objects/Tools/airlock_painter.yml deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml index c3ef660adc7..d851ad5e903 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml @@ -25,10 +25,10 @@ - type: StaticPrice price: 0 - type: StackPrice - price: 0.6 # Frontier: 2.25<0.6 + price: 2.25 - type: PhysicalComposition materialComposition: - Steel: 10 + Steel: 15 - type: entity id: CableHVStack @@ -224,4 +224,4 @@ - type: Sprite state: coillv-10 - type: Stack - count: 1 + count: 1 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Tools/flare.yml b/Resources/Prototypes/Entities/Objects/Tools/flare.yml index c583b466e33..a6a3cfe64da 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/flare.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/flare.yml @@ -98,5 +98,3 @@ Quantity: 2 - ReagentId: Sulfur Quantity: 2 - - type: StaticPrice - price: 7.5 diff --git a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml index 469b63850eb..522a5ca1132 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml @@ -65,7 +65,7 @@ netsync: false - type: Appearance - type: StaticPrice - price: 15.5 + price: 15.5 # Frontier: 40<15.5 - type: StealTarget stealGroup: LAMP - type: Clothing diff --git a/Resources/Prototypes/Entities/Objects/Tools/spray_painter.yml b/Resources/Prototypes/Entities/Objects/Tools/spray_painter.yml index 84dad791b43..d2154326783 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/spray_painter.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/spray_painter.yml @@ -31,4 +31,4 @@ air: '#03fcd3' mix: '#947507' - type: StaticPrice - price: 40 + price: 20 # Frontier 40<20 diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index b89dd3c1891..e35ce5e4c0d 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -42,7 +42,7 @@ materialComposition: Steel: 100 - type: StaticPrice - price: 15 + price: 15 # Frontier 30<15 - type: entity name: screwdriver @@ -86,7 +86,7 @@ materialComposition: Steel: 100 - type: StaticPrice - price: 15 + price: 15 # Frontier 30<15 - type: entity name: wrench @@ -125,7 +125,7 @@ materialComposition: Steel: 100 - type: StaticPrice - price: 15 + price: 11 # Frontier 22<11 - type: entity name: multitool @@ -173,7 +173,7 @@ Steel: 100 Plastic: 100 - type: StaticPrice - price: 35 + price: 28 # Frontier 56<28 - type: entity name: network configurator @@ -221,7 +221,7 @@ enum.NetworkConfiguratorUiKey.Link: type: NetworkConfiguratorBoundUserInterface - type: StaticPrice - price: 25 + price: 28 # Frontier 56<28 - type: GuideHelp guides: - NetworkConfigurator @@ -272,7 +272,7 @@ Steel: 300 Plastic: 100 - type: StaticPrice - price: 60 + price: 50 # Frontier 100<50 - type: MeleeWeapon wideAnimationRotation: -90 attackRate: 1.5 @@ -328,7 +328,7 @@ Steel: 600 Plastic: 100 - type: StaticPrice - price: 110 + price: 55 # Frontier 110<55 vendPrice: 5000 # Frontier - type: UserInterface interfaces: @@ -387,7 +387,7 @@ Steel: 100 Plastic: 100 - type: StaticPrice - price: 40 + price: 30 # Frontier 60<30 vendPrice: 1000 # Frontier - type: entity @@ -480,7 +480,7 @@ Steel: 100 Wood: 50 - type: StaticPrice - price: 25 + price: 12.5 # Frontier 25<12.5 # Delta V: Adds tool quality for digging - type: Tool qualities: diff --git a/Resources/Prototypes/Entities/Objects/Tools/welders.yml b/Resources/Prototypes/Entities/Objects/Tools/welders.yml index 64c6e09f476..49c3c671909 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/welders.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/welders.yml @@ -102,7 +102,7 @@ materialComposition: Steel: 200 - type: StaticPrice - price: 25 + price: 20 # Frontier 40<20 - type: IgnitionSource temperature: 700 @@ -197,4 +197,4 @@ - type: PointLight enabled: false radius: 1.0 - color: orange + color: orange \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/pka.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/pka.yml index 8eec890aa64..9f3774a236c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/pka.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/pka.yml @@ -13,10 +13,9 @@ map: [ "empty-icon" ] # todo: add itemcomponent with inhandVisuals states using unused texture and animation assets in kinetic_accelerator.rsi # todo: add clothingcomponent with clothingVisuals states using unused texture and animations assets in kinetic_accelerator.rsi - - type: StaticPrice - price: 270 - type: Construction #Frontier graph: PKASawn #Frontier node: start #Frontier deconstructionTarget: null #Frontier - - type: Wieldable # Frontier \ No newline at end of file + - type: Wieldable # Frontier + # todo: add clothingcomponent with clothingVisuals states using unused texture and animations assets in kinetic_accelerator.rsi \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml index 49602090556..884ef3f6622 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml @@ -1,6 +1,6 @@ - type: entity name: pickaxe - parent: [BaseItem, RecyclableItemWoodMedium] # Frontier: added RecyclableItemWoodMedium + parent: [ BaseItem, RecyclableItemWoodMedium ] # Frontier: added RecyclableItemWoodMedium id: Pickaxe description: Notched to perfection, for jamming it into rocks. components: @@ -88,7 +88,7 @@ - type: entity abstract: true - parent: BaseItem + parent: [ BaseItem, BaseC1Contraband ] # Frontier: BaseSecurityCargoContraband Date: Tue, 12 Nov 2024 11:25:31 +0000 Subject: [PATCH 24/45] Automatic Changelog (#2391) --- Resources/Changelog/Frontier.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 39cd4550c36..a19f4681a86 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5267,3 +5267,17 @@ Entries: message: Pills no longer give biomass on recycling. id: 5497 time: '2024-11-12T04:56:35.0000000+00:00' +- author: dvir001 + changes: + - type: Tweak + message: >- + Material requirements for printing EVA suits were increased, material + yield from recycling was decreased. + - type: Tweak + message: >- + Glaive re-balance buffed and removed from vending, can be found in + salvage and tech + - type: Tweak + message: Changed some vending machines items overall price + id: 5498 + time: '2024-11-12T11:25:06.0000000+00:00' From 859354f4bed17c46643ae0f786f188ee5c65cefd Mon Sep 17 00:00:00 2001 From: GreaseMonk <1354802+GreaseMonk@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:31:39 +0100 Subject: [PATCH 25/45] Abstract the textile crate (#2397) --- Resources/Prototypes/Catalog/Cargo/cargo_materials.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml b/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml index d9e295a4480..ce9a87e910e 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_materials.yml @@ -55,6 +55,7 @@ - type: cargoProduct id: MaterialTextiles + abstract: true # Frontier icon: sprite: Objects/Materials/materials.rsi state: cloth_3 From 9c8b1751671699d2c9fc8fd930e5225bfb6a6891 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Tue, 12 Nov 2024 15:32:05 +0000 Subject: [PATCH 26/45] Automatic Changelog (#2397) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index a19f4681a86..ab07e93a4a2 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5281,3 +5281,9 @@ Entries: message: Changed some vending machines items overall price id: 5498 time: '2024-11-12T11:25:06.0000000+00:00' +- author: GreaseMonk + changes: + - type: Remove + message: removed textiles crate from trade station + id: 5499 + time: '2024-11-12T15:31:39.0000000+00:00' From 7077bc7fdfb3bad9fcbeaa4f15a6042ffbc89d9a Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Thu, 14 Nov 2024 18:10:49 +0200 Subject: [PATCH 27/45] Nerf (#2401) --- .../Objects/Weapons/Guns/Projectiles/projectiles.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index f6b9b0d129c..654422a3149 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -423,12 +423,12 @@ impactEffect: BulletImpactEffectKinetic damage: types: - Blunt: 30 - Structural: 35 + Blunt: 0.5 # Frontier 30<0.5 + Structural: 1 # Frontier 35<1 - type: Ammo muzzleFlash: HitscanEffect - type: TimedDespawn - lifetime: 1.5 + lifetime: 1 # Frontier 1.5<1 - type: PointLight radius: 2.5 color: white From 84c5c4d0609a1479700c6425ec93bc2c15158608 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Thu, 14 Nov 2024 16:11:17 +0000 Subject: [PATCH 28/45] Automatic Changelog (#2401) --- Resources/Changelog/Frontier.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index ab07e93a4a2..d333a627677 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5287,3 +5287,11 @@ Entries: message: removed textiles crate from trade station id: 5499 time: '2024-11-12T15:31:39.0000000+00:00' +- author: dvir001 + changes: + - type: Tweak + message: >- + The PTK-800 Range and damage lowered, mining ability stay the same with + the PTK-800 able to mine without self destructing itself on reflects. + id: 5500 + time: '2024-11-14T16:10:49.0000000+00:00' From f25052419af0eef3f61cca7a1418eda8f25dc364 Mon Sep 17 00:00:00 2001 From: MisterMecky Date: Fri, 15 Nov 2024 14:11:49 +0800 Subject: [PATCH 29/45] remove glaive from salvage weapons rack (#2405) --- .../Structures/Furniture/Armory/weapon_racks_filled.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Resources/Prototypes/_NF/Entities/Structures/Furniture/Armory/weapon_racks_filled.yml b/Resources/Prototypes/_NF/Entities/Structures/Furniture/Armory/weapon_racks_filled.yml index be152caba90..52d728ad656 100644 --- a/Resources/Prototypes/_NF/Entities/Structures/Furniture/Armory/weapon_racks_filled.yml +++ b/Resources/Prototypes/_NF/Entities/Structures/Furniture/Armory/weapon_racks_filled.yml @@ -20,10 +20,8 @@ - type: ContainerFill containers: weapon1: - - WeaponCrusherGlaive - weapon2: - WeaponCrusher - weapon3: + weapon2: - Pickaxe ## Pirates/Freelancers From 17f5db13a32a1fbd27a9369d2231b0eadbe2cb00 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Fri, 15 Nov 2024 06:14:26 +0000 Subject: [PATCH 30/45] Automatic Changelog (#2405) --- Resources/Changelog/Frontier.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index d333a627677..dfad1ec2c1e 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5295,3 +5295,11 @@ Entries: the PTK-800 able to mine without self destructing itself on reflects. id: 5500 time: '2024-11-14T16:10:49.0000000+00:00' +- author: MisterMecky + changes: + - type: Remove + message: >- + The salvage weapons rack (Found on the prospector) no longer contains a + crusher glaive. + id: 5501 + time: '2024-11-15T06:11:49.0000000+00:00' From f83cee97d03fc855c0588d24bba55b5a55f7f68e Mon Sep 17 00:00:00 2001 From: dustylens <54123313+dustylens@users.noreply.github.com> Date: Fri, 15 Nov 2024 13:02:38 +0000 Subject: [PATCH 31/45] Update bison.yml (#2399) Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com> --- Resources/Maps/_NF/Shuttles/Scrap/bison.yml | 73 +++++++-------------- 1 file changed, 22 insertions(+), 51 deletions(-) diff --git a/Resources/Maps/_NF/Shuttles/Scrap/bison.yml b/Resources/Maps/_NF/Shuttles/Scrap/bison.yml index 8fb1606b206..853422e4845 100644 --- a/Resources/Maps/_NF/Shuttles/Scrap/bison.yml +++ b/Resources/Maps/_NF/Shuttles/Scrap/bison.yml @@ -1499,20 +1499,20 @@ entities: - type: Transform pos: -4.5,-33.5 parent: 1 -- proto: AirlockAtmosphericsGlass +- proto: AirlockAtmospherics entities: - - uid: 9 + - uid: 67 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,-21.5 + pos: 4.5,-28.5 parent: 1 -- proto: AirlockAtmosphericsLocked +- proto: AirlockAtmosphericsGlass entities: - - uid: 2091 + - uid: 9 components: - type: Transform - pos: 4.5,-28.5 + rot: -1.5707963267948966 rad + pos: -3.5,-21.5 parent: 1 - proto: AirlockCargo entities: @@ -1586,9 +1586,7 @@ entities: rot: -1.5707963267948966 rad pos: -10.5,-24.5 parent: 1 -- proto: AirlockEngineeringLocked - entities: - - uid: 67 + - uid: 955 components: - type: Transform pos: 3.5,-28.5 @@ -2088,7 +2086,6 @@ entities: parent: 1 - type: Physics canCollide: False - bodyType: Static - type: Fixtures fixtures: {} - proto: BenchSofaLeft @@ -2099,15 +2096,11 @@ entities: rot: 1.5707963267948966 rad pos: -9.5,-11.5 parent: 1 - - type: Physics - bodyType: Static - uid: 711 components: - type: Transform pos: -7.5,-8.5 parent: 1 - - type: Physics - bodyType: Static - proto: BenchSofaMiddle entities: - uid: 705 @@ -2116,8 +2109,6 @@ entities: rot: 1.5707963267948966 rad pos: -9.5,-12.5 parent: 1 - - type: Physics - bodyType: Static - proto: BenchSofaRight entities: - uid: 701 @@ -2126,16 +2117,12 @@ entities: rot: 1.5707963267948966 rad pos: -9.5,-13.5 parent: 1 - - type: Physics - bodyType: Static - uid: 710 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-9.5 parent: 1 - - type: Physics - bodyType: Static - proto: BenchSteelWhiteLeft entities: - uid: 778 @@ -2143,31 +2130,23 @@ entities: - type: Transform pos: 3.5,-17.5 parent: 1 - - type: Physics - bodyType: Static - uid: 781 components: - type: Transform pos: 3.5,-21.5 parent: 1 - - type: Physics - bodyType: Static - uid: 1933 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-19.5 parent: 1 - - type: Physics - bodyType: Static - uid: 1934 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-23.5 parent: 1 - - type: Physics - bodyType: Static - proto: BenchSteelWhiteRight entities: - uid: 783 @@ -2176,30 +2155,22 @@ entities: rot: 3.141592653589793 rad pos: 3.5,-19.5 parent: 1 - - type: Physics - bodyType: Static - uid: 784 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-23.5 parent: 1 - - type: Physics - bodyType: Static - uid: 1935 components: - type: Transform pos: 4.5,-21.5 parent: 1 - - type: Physics - bodyType: Static - uid: 1936 components: - type: Transform pos: 4.5,-17.5 parent: 1 - - type: Physics - bodyType: Static - proto: BlastDoor entities: - uid: 361 @@ -6897,6 +6868,7 @@ entities: pos: 6.5,-22.5 parent: 1 - type: ItemPlacer + lastPlaceable: False placedEntities: - 2021 - type: PlaceableSurface @@ -7688,19 +7660,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,-17.5 parent: 1 - - type: ContainerContainer - containers: - board: !type:Container - showEnts: False - occludes: True - ents: [] - bank-ATM-cashSlot: !type:ContainerSlot - showEnts: False - occludes: True - ent: null - - type: Physics - canCollide: False - - type: ItemSlots - proto: CrateEmergencyO2Kit entities: - uid: 2636 @@ -11958,6 +11917,8 @@ entities: rot: -1.5707963267948966 rad pos: 8.5,-8.5 parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 2813 components: - type: Transform @@ -12669,6 +12630,8 @@ entities: rot: -1.5707963267948966 rad pos: -5.5,-35.5 parent: 1 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 1640 components: - type: Transform @@ -13268,6 +13231,14 @@ entities: - type: Transform pos: 2.5,-4.5 parent: 1 +- proto: LockerWallMaterialsFuelPlasmaFilled2 + entities: + - uid: 1609 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-29.5 + parent: 1 - proto: LockerWallMedical entities: - uid: 677 @@ -17861,7 +17832,7 @@ entities: rot: 3.141592653589793 rad pos: 4.5,-38.5 parent: 1 -- proto: WarpPointShip +- proto: WarpPoint entities: - uid: 2025 components: From 4e8937abe407bdbe7497b39704c736c076dc3733 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Fri, 15 Nov 2024 13:03:15 +0000 Subject: [PATCH 32/45] Automatic Changelog (#2399) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index dfad1ec2c1e..cdae274c5e7 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5303,3 +5303,9 @@ Entries: crusher glaive. id: 5501 time: '2024-11-15T06:11:49.0000000+00:00' +- author: dustylens + changes: + - type: Tweak + message: Replaced locked airlocks in Bison with unlocked variants. + id: 5502 + time: '2024-11-15T13:02:39.0000000+00:00' From b4c69e6b8afcf2caeb1aa33aa9a5566b7b80acb6 Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:04:20 +0200 Subject: [PATCH 33/45] Felinid code cleanup (#2389) * DeltaV Code * Fixups * stinky * Delete SharedFelinid.cs * yml * capitalize all markings * dragon hatch sound --------- Co-authored-by: Whatstone --- .../Felinid/CoughingUpHairballComponent.cs | 17 +- .../Abilities/Felinid/FelinidComponent.cs | 46 +-- .../Abilities/Felinid/FelinidFoodComponent.cs | 11 +- .../Abilities/Felinid/FelinidSystem.cs | 281 +++++++++--------- .../Abilities/Felinid/HairballComponent.cs | 11 +- .../Nyanotrasen/Abilities/SharedFelinid.cs | 13 - .../Actions/Events/EatMouseActionEvent.cs | 3 + .../Actions/Events/HairballActionEvent.cs | 3 + Resources/Audio/DeltaV/Items/eatfood.ogg | Bin 0 -> 24595 bytes .../Nyanotrasen/Animals/moth_chitter.ogg | Bin 10916 -> 0 bytes .../Felinid => Effects/Species}/hairball.ogg | Bin .../Nyanotrasen/Effects/Species/license.txt | 1 + .../Voice/Felinid/attributions.yml | 2 +- .../Nyanotrasen/Voice/Felinid/license.txt | 3 +- Resources/Audio/Nyanotrasen/blowout1.ogg | Bin 9823 -> 0 bytes Resources/Audio/Nyanotrasen/fireball1.ogg | Bin 12900 -> 0 bytes Resources/Audio/Nyanotrasen/flamethrower1.ogg | Bin 19372 -> 0 bytes Resources/Audio/Nyanotrasen/flamethrower2.ogg | Bin 17504 -> 0 bytes Resources/Audio/Nyanotrasen/flamethrower3.ogg | Bin 22719 -> 0 bytes .../Audio/Nyanotrasen/heartbeat_fast.ogg | Bin 39983 -> 0 bytes Resources/Audio/Nyanotrasen/license.txt | 6 - .../Audio/Nyanotrasen/shogi_piece_clack.ogg | Bin 6675 -> 0 bytes Resources/Audio/_NF/Animals/attributions.yml | 5 + Resources/Audio/_NF/Animals/dragon_hatch.ogg | Bin 0 -> 48303 bytes .../Locale/en-US/deltav/markings/felinid.ftl | 1 + .../Locale/en-US/deltav/markings/rodentia.ftl | 25 +- Resources/Locale/en-US/markings/felinid.ftl | 59 ++-- Resources/Locale/en-US/markings/gauze.ftl | 17 +- Resources/Locale/en-US/markings/reptilian.ftl | 5 +- Resources/Locale/en-US/markings/tattoos.ftl | 3 +- .../Locale/en-US/markings/vox_tattoos.ftl | 9 +- Resources/Locale/en-US/markings/vulpkanin.ftl | 203 ++++++------- .../en-US/nyanotrasen/abilities/felinid.ftl | 2 +- .../Prototypes/Entities/Mobs/NPCs/animals.yml | 1 + .../Entities/Mobs/NPCs/regalrat.yml | 7 + .../Prototypes/Nyanotrasen/Actions/types.yml | 12 +- .../Objects/Specific/Species/felinid.yml | 15 +- .../Nyanotrasen/Voice/speech_sounds.yml | 8 - .../_NF/Entities/Objects/Misc/dragon_egg.yml | 2 +- .../Recipes/Cooking/food_sequence_element.yml | 2 +- .../Specific/Species/felinid.rsi/icon.png | Bin .../Specific/Species/felinid.rsi/meta.json | 2 +- 42 files changed, 390 insertions(+), 385 deletions(-) delete mode 100644 Content.Shared/Nyanotrasen/Abilities/SharedFelinid.cs create mode 100644 Content.Shared/Nyanotrasen/Actions/Events/EatMouseActionEvent.cs create mode 100644 Content.Shared/Nyanotrasen/Actions/Events/HairballActionEvent.cs create mode 100644 Resources/Audio/DeltaV/Items/eatfood.ogg delete mode 100644 Resources/Audio/Nyanotrasen/Animals/moth_chitter.ogg rename Resources/Audio/Nyanotrasen/{Voice/Felinid => Effects/Species}/hairball.ogg (100%) create mode 100644 Resources/Audio/Nyanotrasen/Effects/Species/license.txt delete mode 100644 Resources/Audio/Nyanotrasen/blowout1.ogg delete mode 100644 Resources/Audio/Nyanotrasen/fireball1.ogg delete mode 100644 Resources/Audio/Nyanotrasen/flamethrower1.ogg delete mode 100644 Resources/Audio/Nyanotrasen/flamethrower2.ogg delete mode 100644 Resources/Audio/Nyanotrasen/flamethrower3.ogg delete mode 100644 Resources/Audio/Nyanotrasen/heartbeat_fast.ogg delete mode 100644 Resources/Audio/Nyanotrasen/license.txt delete mode 100644 Resources/Audio/Nyanotrasen/shogi_piece_clack.ogg create mode 100644 Resources/Audio/_NF/Animals/dragon_hatch.ogg delete mode 100644 Resources/Prototypes/Nyanotrasen/Voice/speech_sounds.yml rename Resources/Textures/{ => Nyanotrasen}/Objects/Specific/Species/felinid.rsi/icon.png (100%) rename Resources/Textures/{ => Nyanotrasen}/Objects/Specific/Species/felinid.rsi/meta.json (98%) diff --git a/Content.Server/Nyanotrasen/Abilities/Felinid/CoughingUpHairballComponent.cs b/Content.Server/Nyanotrasen/Abilities/Felinid/CoughingUpHairballComponent.cs index 6102bcbfa1a..1bfa0809b63 100644 --- a/Content.Server/Nyanotrasen/Abilities/Felinid/CoughingUpHairballComponent.cs +++ b/Content.Server/Nyanotrasen/Abilities/Felinid/CoughingUpHairballComponent.cs @@ -1,12 +1,11 @@ -namespace Content.Server.Abilities.Felinid +namespace Content.Server.Abilities.Felinid; + +[RegisterComponent] +public sealed partial class CoughingUpHairballComponent : Component { - [RegisterComponent] - public sealed partial class CoughingUpHairballComponent : Component - { - [DataField("accumulator")] - public float Accumulator = 0f; + [DataField("accumulator")] + public float Accumulator = 0f; - [DataField("coughUpTime")] - public TimeSpan CoughUpTime = TimeSpan.FromSeconds(2.15); // length of hairball.ogg - } + [DataField("coughUpTime")] + public TimeSpan CoughUpTime = TimeSpan.FromSeconds(2.15); // length of hairball.ogg } diff --git a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidComponent.cs b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidComponent.cs index 775f267ce90..9165b90de05 100644 --- a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidComponent.cs +++ b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidComponent.cs @@ -3,22 +3,34 @@ using Content.Shared.Actions; using Robust.Shared.Utility; -namespace Content.Server.Abilities.Felinid +namespace Content.Server.Abilities.Felinid; + +[RegisterComponent] +public sealed partial class FelinidComponent : Component { - [RegisterComponent] - public sealed partial class FelinidComponent : Component - { - /// - /// The hairball prototype to use. - /// - [DataField("hairballPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] - public string HairballPrototype = "Hairball"; - - [DataField("hairballActionPrototype")] - public string HairballActionPrototype = "ActionHairBall"; - - public EntityUid? HairballAction = null; - public EntityUid? EatMouseAction = null; - public EntityUid? PotentialTarget = null; - } + /// + /// The hairball prototype to use. + /// + [DataField("hairballPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string HairballPrototype = "Hairball"; + + //[DataField("hairballAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + //public string HairballAction = "ActionHairball"; + + [DataField("hairballActionId", + customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? HairballActionId = "ActionHairball"; + + [DataField("hairballAction")] + public EntityUid? HairballAction; + + [DataField("eatActionId", + customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? EatActionId = "ActionEatMouse"; + + [DataField("eatAction")] + public EntityUid? EatAction; + + [DataField("eatActionTarget")] + public EntityUid? EatActionTarget = null; } diff --git a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidFoodComponent.cs b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidFoodComponent.cs index 559e70e629c..93804eeb5a0 100644 --- a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidFoodComponent.cs +++ b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidFoodComponent.cs @@ -1,6 +1,5 @@ -namespace Content.Server.Abilities.Felinid -{ - [RegisterComponent] - public sealed partial class FelinidFoodComponent : Component - {} -} +namespace Content.Server.Abilities.Felinid; + +[RegisterComponent] +public sealed partial class FelinidFoodComponent : Component +{ } diff --git a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidSystem.cs b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidSystem.cs index 28213f71350..6e06a570f6b 100644 --- a/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidSystem.cs +++ b/Content.Server/Nyanotrasen/Abilities/Felinid/FelinidSystem.cs @@ -1,4 +1,5 @@ using Content.Shared.Actions; +using Content.Shared.Actions.Events; using Content.Shared.Audio; using Content.Shared.StatusEffect; using Content.Shared.Throwing; @@ -6,198 +7,196 @@ using Content.Shared.Inventory; using Content.Shared.Hands; using Content.Shared.IdentityManagement; +using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; using Content.Server.Body.Components; using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.Medical; -using Content.Server.Nutrition.Components; using Content.Server.Nutrition.EntitySystems; -using Content.Shared.Nutrition.Components; +using Content.Server.Nutrition.Components; +using Content.Server.Chemistry.EntitySystems; using Content.Server.Popups; -using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; +using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Player; using Robust.Shared.Random; using Robust.Shared.Prototypes; -using Content.Shared.Nutrition.EntitySystems; -using Content.Shared.Nyanotrasen.Abilities; using Content.Shared.CombatMode.Pacification; // Frontier -namespace Content.Server.Abilities.Felinid +namespace Content.Server.Abilities.Felinid; + +public sealed partial class FelinidSystem : EntitySystem { - public sealed class FelinidSystem : EntitySystem + + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly HungerSystem _hungerSystem = default!; + [Dependency] private readonly VomitSystem _vomitSystem = default!; + [Dependency] private readonly SolutionContainerSystem _solutionSystem = default!; + [Dependency] private readonly IRobustRandom _robustRandom = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + public override void Initialize() { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnHairball); + SubscribeLocalEvent(OnEatMouse); + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnequipped); + SubscribeLocalEvent(OnHairballHit); + SubscribeLocalEvent(OnHairballPickupAttempt); + SubscribeLocalEvent(OnHairballAttemptPacifiedThrow); // Frontier - Block hairball abuse + } - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; - [Dependency] private readonly VomitSystem _vomitSystem = default!; - [Dependency] private readonly HungerSystem _hunger = default!; - [Dependency] private readonly SolutionContainerSystem _solutionSystem = default!; - [Dependency] private readonly IRobustRandom _robustRandom = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly InventorySystem _inventorySystem = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - - public override void Initialize() + private Queue RemQueue = new(); + + public override void Update(float frameTime) + { + base.Update(frameTime); + foreach (var cat in RemQueue) { - base.Initialize(); - SubscribeLocalEvent(OnInit); - SubscribeLocalEvent(OnHairball); - SubscribeLocalEvent(OnEatMouse); - SubscribeLocalEvent(OnEquipped); - SubscribeLocalEvent(OnUnequipped); - SubscribeLocalEvent(OnHairballHit); - SubscribeLocalEvent(OnHairballPickupAttempt); - - SubscribeLocalEvent(OnHairballAttemptPacifiedThrow); // Frontier - Block hairball abuse + RemComp(cat); } + RemQueue.Clear(); - private Queue RemQueue = new(); - - public override void Update(float frameTime) + foreach (var (hairballComp, catComp) in EntityQuery()) { - base.Update(frameTime); - foreach (var cat in RemQueue) - { - RemComp(cat); - } - RemQueue.Clear(); - - foreach (var (hairballComp, catComp) in EntityQuery()) - { - hairballComp.Accumulator += frameTime; - if (hairballComp.Accumulator < hairballComp.CoughUpTime.TotalSeconds) - continue; + hairballComp.Accumulator += frameTime; + if (hairballComp.Accumulator < hairballComp.CoughUpTime.TotalSeconds) + continue; - hairballComp.Accumulator = 0; - SpawnHairball(hairballComp.Owner, catComp); - RemQueue.Enqueue(hairballComp.Owner); - } + hairballComp.Accumulator = 0; + SpawnHairball(hairballComp.Owner, catComp); + RemQueue.Enqueue(hairballComp.Owner); } + } - private void OnInit(EntityUid uid, FelinidComponent component, ComponentInit args) - { - if (!_prototypeManager.TryIndex("ActionHairball", out var hairball)) - return; - _actionsSystem.AddAction(uid, hairball.ID); - } + private void OnInit(EntityUid uid, FelinidComponent component, ComponentInit args) + { + if (component.HairballAction != null) + return; - private void OnEquipped(EntityUid uid, FelinidComponent component, DidEquipHandEvent args) - { - if (!HasComp(args.Equipped)) - return; + //component.HairballAction = Spawn("ActionHairball"); + _actionsSystem.AddAction(uid, ref component.HairballAction, component.HairballActionId); + } - component.PotentialTarget = args.Equipped; + private void OnEquipped(EntityUid uid, FelinidComponent component, DidEquipHandEvent args) + { + if (!HasComp(args.Equipped)) + return; - if (!_prototypeManager.TryIndex("ActionEatMouse", out var eatMouse)) - return; - component.EatMouseAction = _actionsSystem.AddAction(uid, eatMouse.ID); - } + component.EatActionTarget = args.Equipped; - private void OnUnequipped(EntityUid uid, FelinidComponent component, DidUnequipHandEvent args) - { - if (args.Unequipped == component.PotentialTarget) - { - component.PotentialTarget = null; - if (component.EatMouseAction != null) - _actionsSystem.RemoveAction(component.EatMouseAction); - } - } + //component.EatAction = Spawn("ActionEatMouse"); + _actionsSystem.AddAction(uid, ref component.EatAction, component.EatActionId); + } - private void OnHairball(EntityUid uid, FelinidComponent component, HairballActionEvent args) + private void OnUnequipped(EntityUid uid, FelinidComponent component, DidUnequipHandEvent args) + { + if (args.Unequipped == component.EatActionTarget) { - if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) && - EntityManager.TryGetComponent(maskUid, out var blocker) && - blocker.Enabled) - { - _popupSystem.PopupEntity(Loc.GetString("hairball-mask", ("mask", maskUid)), uid, uid); - return; - } - - _popupSystem.PopupEntity(Loc.GetString("hairball-cough", ("name", Identity.Entity(uid, EntityManager))), uid); - _audio.PlayPvs("/Audio/Nyanotrasen/Voice/Felinid/hairball.ogg", uid, AudioHelpers.WithVariation(0.15f)); - - EnsureComp(uid); - args.Handled = true; + component.EatActionTarget = null; + if (component.EatAction != null) + _actionsSystem.RemoveAction(uid, component.EatAction.Value); } + } - private void OnEatMouse(EntityUid uid, FelinidComponent component, EatMouseActionEvent args) + private void OnHairball(EntityUid uid, FelinidComponent component, HairballActionEvent args) + { + if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) && + EntityManager.TryGetComponent(maskUid, out var blocker) && + blocker.Enabled) { - if (component.PotentialTarget == null) - return; - - if (!TryComp(uid, out var hunger)) - return; + _popupSystem.PopupEntity(Loc.GetString("hairball-mask", ("mask", maskUid)), uid, uid); + return; + } - if (hunger.CurrentThreshold == Shared.Nutrition.Components.HungerThreshold.Overfed) - { - _popupSystem.PopupEntity(Loc.GetString("food-system-you-cannot-eat-any-more"), uid, uid, Shared.Popups.PopupType.SmallCaution); - return; - } + _popupSystem.PopupEntity(Loc.GetString("hairball-cough", ("name", Identity.Entity(uid, EntityManager))), uid); + _audio.PlayPvs("/Audio/Nyanotrasen/Effects/Species/hairball.ogg", uid, AudioHelpers.WithVariation(0.15f)); - if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) && - EntityManager.TryGetComponent(maskUid, out var blocker) && - blocker.Enabled) - { - _popupSystem.PopupEntity(Loc.GetString("hairball-mask", ("mask", maskUid)), uid, uid, Shared.Popups.PopupType.SmallCaution); - return; - } + EnsureComp(uid); + args.Handled = true; + } - if (component.HairballAction != null - && _actionsSystem.TryGetActionData(component.HairballAction, out var actionData)) - { - _actionsSystem.SetCharges(component.HairballAction, actionData!.Charges + 1); - _actionsSystem.SetEnabled(component.HairballAction, true); - } - Del(component.PotentialTarget.Value); - component.PotentialTarget = null; + private void OnEatMouse(EntityUid uid, FelinidComponent component, EatMouseActionEvent args) + { + if (component.EatActionTarget == null) + return; - _audio.PlayPvs("/Audio/Items/eatfood.ogg", uid, AudioHelpers.WithVariation(0.15f)); + if (!TryComp(uid, out var hunger)) + return; - _hunger.ModifyHunger(uid, 70f, hunger); - _actionsSystem.RemoveAction(uid, component.EatMouseAction); + if (hunger.CurrentThreshold == Shared.Nutrition.Components.HungerThreshold.Overfed) + { + _popupSystem.PopupEntity(Loc.GetString("food-system-you-cannot-eat-any-more"), uid, uid, Shared.Popups.PopupType.SmallCaution); + return; } - private void SpawnHairball(EntityUid uid, FelinidComponent component) + if (_inventorySystem.TryGetSlotEntity(uid, "mask", out var maskUid) && + EntityManager.TryGetComponent(maskUid, out var blocker) && + blocker.Enabled) { - var hairball = EntityManager.SpawnEntity(component.HairballPrototype, Transform(uid).Coordinates); - var hairballComp = Comp(hairball); - - if (TryComp(uid, out var bloodstream) && bloodstream.ChemicalSolution is Entity bloodSol) - { - var tempSol = _solutionSystem.SplitSolution(bloodSol, 20); - - if (_solutionSystem.TryGetSolution(hairball, hairballComp.SolutionName, out var hairballSolution) - && hairballSolution is Entity solution) - { - _solutionSystem.TryAddSolution(solution, tempSol); - } - } + _popupSystem.PopupEntity(Loc.GetString("hairball-mask", ("mask", maskUid)), uid, uid, Shared.Popups.PopupType.SmallCaution); + return; } - private void OnHairballHit(EntityUid uid, HairballComponent component, ThrowDoHitEvent args) + + if (component.HairballAction != null) { - if (HasComp(args.Target) || !HasComp(args.Target)) - return; - if (_robustRandom.Prob(0.2f)) - _vomitSystem.Vomit(args.Target); + _actionsSystem.SetCharges(component.HairballAction, 1); // You get the charge back and that's it. Tough. + _actionsSystem.SetEnabled(component.HairballAction, true); } + Del(component.EatActionTarget.Value); + component.EatActionTarget = null; + + _audio.PlayPvs("/Audio/DeltaV/Items/eatfood.ogg", uid, AudioHelpers.WithVariation(0.15f)); + + _hungerSystem.ModifyHunger(uid, 50f, hunger); + + if (component.EatAction != null) + _actionsSystem.RemoveAction(uid, component.EatAction.Value); + } + + private void SpawnHairball(EntityUid uid, FelinidComponent component) + { + var hairball = EntityManager.SpawnEntity(component.HairballPrototype, Transform(uid).Coordinates); + var hairballComp = Comp(hairball); - private void OnHairballPickupAttempt(EntityUid uid, HairballComponent component, GettingPickedUpAttemptEvent args) + if (TryComp(uid, out var bloodstream) && bloodstream.ChemicalSolution.HasValue) { - if (HasComp(args.User) || !HasComp(args.User)) - return; + var temp = _solutionSystem.SplitSolution(bloodstream.ChemicalSolution.Value, 20); - if (_robustRandom.Prob(0.2f)) + if (_solutionSystem.TryGetSolution(hairball, hairballComp.SolutionName, out var hairballSolution)) { - _vomitSystem.Vomit(args.User); - args.Cancel(); + _solutionSystem.TryAddSolution(hairballSolution.Value, temp); } } + } + private void OnHairballHit(EntityUid uid, HairballComponent component, ThrowDoHitEvent args) + { + if (HasComp(args.Target) || !HasComp(args.Target)) + return; + if (_robustRandom.Prob(0.2f)) + _vomitSystem.Vomit(args.Target); + } - private void OnHairballAttemptPacifiedThrow(Entity ent, ref AttemptPacifiedThrowEvent args) // Frontier - Block hairball abuse + private void OnHairballPickupAttempt(EntityUid uid, HairballComponent component, GettingPickedUpAttemptEvent args) + { + if (HasComp(args.User) || !HasComp(args.User)) + return; + + if (_robustRandom.Prob(0.2f)) { - args.Cancel("pacified-cannot-throw-hairball"); + _vomitSystem.Vomit(args.User); + args.Cancel(); } } + private void OnHairballAttemptPacifiedThrow(Entity ent, ref AttemptPacifiedThrowEvent args) // Frontier - Block hairball abuse + { + args.Cancel("pacified-cannot-throw-hairball"); + } } diff --git a/Content.Server/Nyanotrasen/Abilities/Felinid/HairballComponent.cs b/Content.Server/Nyanotrasen/Abilities/Felinid/HairballComponent.cs index d358926c20d..01c01dbc2e5 100644 --- a/Content.Server/Nyanotrasen/Abilities/Felinid/HairballComponent.cs +++ b/Content.Server/Nyanotrasen/Abilities/Felinid/HairballComponent.cs @@ -1,8 +1,7 @@ -namespace Content.Server.Abilities.Felinid +namespace Content.Server.Abilities.Felinid; + +[RegisterComponent] +public sealed partial class HairballComponent : Component { - [RegisterComponent] - public sealed partial class HairballComponent : Component - { - public string SolutionName = "hairball"; - } + public string SolutionName = "hairball"; } diff --git a/Content.Shared/Nyanotrasen/Abilities/SharedFelinid.cs b/Content.Shared/Nyanotrasen/Abilities/SharedFelinid.cs deleted file mode 100644 index b8d0e0c4c7d..00000000000 --- a/Content.Shared/Nyanotrasen/Abilities/SharedFelinid.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Content.Shared.Actions; - -namespace Content.Shared.Nyanotrasen.Abilities; - -public sealed partial class HairballActionEvent : InstantActionEvent -{ - -} - -public sealed partial class EatMouseActionEvent : InstantActionEvent -{ - -} diff --git a/Content.Shared/Nyanotrasen/Actions/Events/EatMouseActionEvent.cs b/Content.Shared/Nyanotrasen/Actions/Events/EatMouseActionEvent.cs new file mode 100644 index 00000000000..63573febb5c --- /dev/null +++ b/Content.Shared/Nyanotrasen/Actions/Events/EatMouseActionEvent.cs @@ -0,0 +1,3 @@ +namespace Content.Shared.Actions.Events; + +public sealed partial class EatMouseActionEvent : InstantActionEvent {} diff --git a/Content.Shared/Nyanotrasen/Actions/Events/HairballActionEvent.cs b/Content.Shared/Nyanotrasen/Actions/Events/HairballActionEvent.cs new file mode 100644 index 00000000000..1c05611b865 --- /dev/null +++ b/Content.Shared/Nyanotrasen/Actions/Events/HairballActionEvent.cs @@ -0,0 +1,3 @@ +namespace Content.Shared.Actions.Events; + +public sealed partial class HairballActionEvent : InstantActionEvent { } diff --git a/Resources/Audio/DeltaV/Items/eatfood.ogg b/Resources/Audio/DeltaV/Items/eatfood.ogg new file mode 100644 index 0000000000000000000000000000000000000000..69fd53749335254a33a8aa29dbca70e0b14d0a72 GIT binary patch literal 24595 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 Dhm1-R literal 0 HcmV?d00001 diff --git a/Resources/Audio/Nyanotrasen/Animals/moth_chitter.ogg b/Resources/Audio/Nyanotrasen/Animals/moth_chitter.ogg deleted file mode 100644 index efeafa555adf95b6dd2300078e9afa1efe03f291..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10916 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 PCr6-Rf1eOVBP9Gk3nw(m diff --git a/Resources/Audio/Nyanotrasen/flamethrower1.ogg b/Resources/Audio/Nyanotrasen/flamethrower1.ogg deleted file mode 100644 index 1939bd21625d2bd2d5b42be8c3a0d434b31729c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19372 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�kg8P`o}T-*I-iMk_|FF7!1d z6yKG-zv0Z}&8YL;fW4etJ4~GgEL6$W{rtpK zZ>DT3Z&W8KHk@-e@v2nb8;$-C@ng-z)V84cWQ;p<*qx`1jWTaBVzS;d}0K|CjQ zoVxDxieigUR(e(wsrdrI_8W6g*X+0Wv^aP!5ejcqC?(Z5DSn^vOY$QmFRUBx-A#G? zj*YKF3UI zNZYfKtHySZO(T7$yFe3Pd+u=b0H0`9>V$n|cUGS#!C z^R?irkSe8IM)YOo^!EO9p?_UA)AW4$t63_Ut@ycd==*fs7tU%^r2{XHctmmvTNGlg zd_InA=z;=Q6J@=xajVnZG&VAdN(INmyBz>E=A=H`1UE`~>r~iDAC2c}I75>tA%Irg z)qI`)uJWQ7RB~^ifvX>v2o77k4@ZEUL97GhoA^z&0(8?47zqa3i!pD-J@CqRwp!Nd z#IOLFPRg#NH0;D6AY8sS5$C!srRgB~wNQoeSW>vB5a%;iAZNla?1`f&CVhvj;GV+^ zO_1+Aur{nyhJc`79lf*qD|(h1TrvOEn^v&}y{j)PUAKjk<3jbs{`0S;UTs?e4Ik9> zdJW~4*q_el7M6$8I(_Z$r}--io2=y;v&tERbhM(4z#Q0U+dJY3+um$<-&v-gCO?mf zz>wOl|JGV6L0vCTH*I8j(m-yx9@=h+8K?Ne|L!BhUQB$iu-j%=tzx)nQ)g0yk~m2p z_F}Jxt`M;$nSZEgdQpto)Z0GToE^S9;HgDan}FI|v=5m;=XKzMCEPv@0XNnvwZX6i58Q(rH*LQy2IoiD=XF)YfZ%9kg z+xZ&_yd&ZtX2;0Drk_<9i7e8OQf?NJl<>%hJ$r26^YPwak61DzVD1f+Z+v=SWAaH6 zPLV`(&Gax9r6Xv=BDKjQ1oG--B^i)2U-z&>a z95_59XC6{mBDlMeDTLgmlxK>f)-vJ4oVy&(T+^K%+TOt)xQ4)xyegaS(YX-}hoVH_!s+fn&`^8?jFW1|N;*#|q^wD8;|XZ7og&mB-6 z-?QRg{XpJ$s$1MYV(J(*{k(S2Cm#JZWu`8>1Ef_}XEB?G?lw*o{KSxE}%Q~A)LfJirIpj&--5!#Ckzmlpb_sX7t38S}ERG6)IX7Iz4 z-c@m(ueLzjorU*0GSnUqyM_Fk7L2hF65)x|EWPiEA$m;U+zPrm{=+Rxj>s8Qv#0m% zPN6$>VPYqTN+Pf!2OCU#^j;iiEs(=n1K0Pi`X01q(w2lPFZ`Y%B;5x9OhG*sLyF^U zL)cv`Rlu(8=c}Xfq=TlEmOXx%r{+~DUV64HW|ff@tlfePyf&l+rKhhC!W5qIYkMhJ zhplS#h6E9!D;|S+O?f&d`7U|~zf-5dP(e5FANET9xV*u8P2kb6YTBX%`#-Jx$5CKJ zQ9#yeP7 z+cYD{svmfg(2y3pY;d3f9>pX_^6!wJAbM07Ki4f5Wh^!Mr1J4iNlQ4dGBGzqW&D|~ z{M^w7yC1-zEY;5u?`w0?(e#PBe0yn7=BHrRdrbUpl}8v@MP58<6dU}nU7;(oh^-&l z0*D#{3(m?L&g+zG#bDl?q%&?lZ1uz=Uc};Dn75NsxOo0R>M;57Kx>x@*n-m#U;dwm lZ~pz@QKm^$Y3W-Is^Crd4QO9dBpLkVSZNLpjzAFb{{Va-O(p;U diff --git a/Resources/Audio/Nyanotrasen/flamethrower3.ogg b/Resources/Audio/Nyanotrasen/flamethrower3.ogg deleted file mode 100644 index 34082376cf28f48088d11054d53e6af3b5208ba6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22719 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
;#SL9b|D)M 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 diff --git a/Resources/Audio/Nyanotrasen/license.txt b/Resources/Audio/Nyanotrasen/license.txt deleted file mode 100644 index c7d32e7e2f1..00000000000 --- a/Resources/Audio/Nyanotrasen/license.txt +++ /dev/null @@ -1,6 +0,0 @@ -heartbeat_fast.ogg is modified from https://freesound.org/people/greyseraphim/sounds/21409/ which is licensed under the Creative Commons 0 License. This modified file follows the same license. -fireball1.ogg is modified from https://freesound.org/people/wjl/sounds/267887/ which is licensed under the Creative Commons 0 License. This modified file follows the same license. -flamethrower1.ogg is modified from https://freesound.org/people/pugaeme/sounds/396890/ which is licensed under the Creative Commons Attribution 3.0 License. This modified file follows the same license. -flamethrower2.ogg is modified from https://freesound.org/people/pugaeme/sounds/396890/ which is licensed under the Creative Commons Attribution 3.0 License. This modified file follows the same license. -flamethrower3.ogg is modified from https://freesound.org/people/pugaeme/sounds/396890/ which is licensed under the Creative Commons Attribution 3.0 License. This modified file follows the same license. -blowout1.ogg is licensed under the Creative Commons Attribution-ShareAlike 4.0 License by the author @Vordenburg. diff --git a/Resources/Audio/Nyanotrasen/shogi_piece_clack.ogg b/Resources/Audio/Nyanotrasen/shogi_piece_clack.ogg deleted file mode 100644 index e4ba5088f90aeed5b94de98ad737ae6d9fed142f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6675 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 diff --git a/Resources/Audio/_NF/Animals/attributions.yml b/Resources/Audio/_NF/Animals/attributions.yml index 3a107de838b..69845298141 100644 --- a/Resources/Audio/_NF/Animals/attributions.yml +++ b/Resources/Audio/_NF/Animals/attributions.yml @@ -22,3 +22,8 @@ license: "CC-BY-4.0" copyright: "Audio is recorded/created by 'salvantrix' for Frontier" source: "https://github.com/new-frontiers-14/frontier-station-14/" + +- files: ["dragon_hatch.ogg"] + license: "CC-BY-4.0" + copyright: "Edited from tgstation by whatston3 (GitHub)" + source: "https://github.com/tgstation/tgstation/commit/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0" diff --git a/Resources/Audio/_NF/Animals/dragon_hatch.ogg b/Resources/Audio/_NF/Animals/dragon_hatch.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ced13462805c507b77ea7f7c588e0ac28965a52f GIT binary patch literal 48303 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
- //public static readonly CVarDef RoundEndPacifist = - // CVarDef.Create("game.round_end_pacifist", false, CVar.SERVERONLY); + public static readonly CVarDef RoundEndPacifist = + CVarDef.Create("game.round_end_pacifist", false, CVar.REPLICATED); + + /// + /// Whether the no EORG popup is enabled. + /// + public static readonly CVarDef RoundEndNoEorgPopup = + CVarDef.Create("game.round_end_eorg_popup_enabled", true, CVar.SERVER | CVar.REPLICATED); + + /// + /// Skip the no EORG popup. + /// + public static readonly CVarDef SkipRoundEndNoEorgPopup = + CVarDef.Create("game.skip_round_end_eorg_popup", false, CVar.CLIENTONLY | CVar.ARCHIVE); + + /// + /// How long to display the EORG popup for. + /// + public static readonly CVarDef RoundEndNoEorgPopupTime = + CVarDef.Create("game.round_end_eorg_popup_time", 5f, CVar.SERVER | CVar.REPLICATED); /// /// Disables all vision filters for species like Vulpkanin or Harpies. There are good reasons someone might want to disable these. /// public static readonly CVarDef NoVisionFilters = - CVarDef.Create("accessibility.no_vision_filters", false, CVar.CLIENTONLY | CVar.ARCHIVE); + CVarDef.Create("accessibility.no_vision_filters", true, CVar.CLIENTONLY | CVar.ARCHIVE); + + /// + /// Whether the Shipyard is enabled. + /// + //public static readonly CVarDef Shipyard = + // CVarDef.Create("shuttle.shipyard", true, CVar.SERVERONLY); } diff --git a/Resources/Locale/en-US/deltav/roundend/no-eorg-popup.ftl b/Resources/Locale/en-US/deltav/roundend/no-eorg-popup.ftl new file mode 100644 index 00000000000..cb5d7262d3a --- /dev/null +++ b/Resources/Locale/en-US/deltav/roundend/no-eorg-popup.ftl @@ -0,0 +1,9 @@ +# Frontier: edits to title and messages +no-eorg-popup-title = Frontier Station +no-eorg-popup-label = Welcome to the End of Round! +no-eorg-popup-message = [bold]End-of-round griefing (EORG)[/bold] is [color=#DD0000]not allowed[/color]. Please stay in character until the lobby screen appears to maintain an immersive environment for everyone. Thank you for respecting the community rules! +no-eorg-popup-rule = [bold][color=#a4885c]Significant end-of-round griefing (EORG) is not allowed.[/color][/bold] +no-eorg-popup-rule-text = This includes attacking, destroying, polluting, and severely injuring players or property without reason. Remember that you are playing a character throughout the round. +no-eorg-popup-close-button = Sounds good! +no-eorg-popup-close-button-wait = The close button will be enabled after {$time} seconds. +no-eorg-popup-skip-checkbox = Don't show this again. From 8bf9c2d9dfbe97426f2af6edf65ba6df1cc2c9e4 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Fri, 15 Nov 2024 19:00:31 +0000 Subject: [PATCH 39/45] Automatic Changelog (#2327) --- Resources/Changelog/Frontier.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 1b50c0e3cd2..0d66838d561 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5317,3 +5317,11 @@ Entries: message: Explosive and EMP crossbow bolts are once again craftable. id: 5503 time: '2024-11-15T14:07:02.0000000+00:00' +- author: dvir001 + changes: + - type: Tweak + message: >- + Species vision filters are now disabled by default. You can re-enable + them in the settings! + id: 5504 + time: '2024-11-15T19:00:06.0000000+00:00' From 0338e6ea867554ead6b2d81c12f5565f14e47427 Mon Sep 17 00:00:00 2001 From: blackknight954 <40075385+blackknight954@users.noreply.github.com> Date: Fri, 15 Nov 2024 13:01:00 -0600 Subject: [PATCH 40/45] Bluespace Event NFZ announcements (#2302) * Updates the announcement regarding the bluespace events Syndicate Cache and NT Vault to include information about a no fly zone in the announcement. * Minor spelling correction * Minor spelling fixes * Update Resources/Locale/en-US/_NF/bluespace-events/events.ftl Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com> * Update Resources/Locale/en-US/_NF/bluespace-events/events.ftl Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com> * Replaced tiny fans with directional fans, Added a sink to the mess area * Resolved conflicts * Revert "Replaced tiny fans with directional fans, Added a sink to the mess area" This reverts commit e41149283a66325695cdfb1022f30a515479505b. * Grammar pass, merge review * Update Resources/Locale/en-US/_NF/bluespace-events/events.ftl * revised vault announcement, remunerated to paid * what is grammar? --------- Co-authored-by: Whatstone <166147148+whatston3@users.noreply.github.com> Co-authored-by: Whatstone --- .../en-US/_NF/bluespace-events/events.ftl | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Resources/Locale/en-US/_NF/bluespace-events/events.ftl b/Resources/Locale/en-US/_NF/bluespace-events/events.ftl index c1e46ffd405..33a3e1ac606 100644 --- a/Resources/Locale/en-US/_NF/bluespace-events/events.ftl +++ b/Resources/Locale/en-US/_NF/bluespace-events/events.ftl @@ -1,14 +1,15 @@ + station-event-bluespace-dungeon-start-announcement = Signatures of a large inbound object have been detected. Investigate with caution, NanoTrasen is not liable for damages sustained or loss of life. station-event-bluespace-dungeon-warning-announcement = Bluespace instability detected on foreign object, five minutes until estimated departure. station-event-bluespace-dungeon-end-announcement = Critical bluespace instability detected, the foreign object has exited the sector. -station-event-bluespace-vault-start-announcement = A NanoTrasen autonomous armored vault transport has made an FTL error and will soon arrive nearby. Your sector will be rewarded for it's safe return. +station-event-bluespace-vault-start-announcement = A NanoTrasen armored vault is inbound to the sector. The NFSD may declare the vault a No Fly Zone. Station accounts will be rewarded for its safe return. station-event-bluespace-vault-warning-announcement = Remote FTL procedures initialized, five minutes until vault extraction. -station-event-bluespace-vault-end-announcement = We have successfully retrieved the vault from your sector and have reimbursed your nearby Frontier Outpost accordingly. +station-event-bluespace-vault-end-announcement = We have retrieved the vault from your sector. Station accounts have been paid. -station-event-bluespace-cache-start-announcement = A Syndicate transport has been intercepted from FTL and will soon arrive nearby. Guard the armored weapons cache until NanoTrasen can retrieve it for a reward. +station-event-bluespace-cache-start-announcement = A Syndicate weapons cache is inbound to the sector. The NFSD may declare the cache a No Fly Zone. Station accounts will be rewarded for guarding the cache. station-event-bluespace-cache-warning-announcement = Remote FTL procedures initialized, five minutes until weapons cache extraction. -station-event-bluespace-cache-end-announcement = We have successfully retrieved the Syndicate weapons cache from your sector and have reimbursed your nearby Frontier Outpost accordingly. +station-event-bluespace-cache-end-announcement = We have retrieved the Syndicate weapons cache from your sector. Station accounts have been paid. station-event-bluespace-asteroid-start-announcement = Long range scans indicate an unusually large asteroid entering the sector. NanoTrasen advises prospectors to divert operations for maximum profit potential. station-event-bluespace-asteroid-warning-announcement = Bluespace instability detected on asteroid, five minutes until estimated departure. @@ -18,15 +19,15 @@ station-event-bluespace-ship-start-announcement = We have detected an unusual FT station-event-bluespace-ship-warning-announcement = Remote FTL procedures initialized, five minutes until ship dissipation. station-event-bluespace-ship-end-announcement = In compliance with NanoTrasen FTL traffic patterns, the unknown ship has been dissipated to ensure non-collision. -station-event-bluespace-syndicate-ftl-interception-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command disrupted the FTL-jump of Syndicate Vessel, according to our deepspace scanners the vessel either already entered the real space in your sector or is about to enter. Code: Intercept, Expunge, Decimate, Cauterise. Expect armed opposition, use of lethal force against enemy agents is authorized. Do note: any loss of NT-affiliated personnel lives will not be compensated. Reminder: NT personnel who are granted security clearance for the engagement are required to surrender any hazardous materials to the local security department to ensure safe transportation of Syndicate technology to CentCom for study. Should there be any prisoners, security personnel is required to prepare them for transportation to CentCom for interrogation through the NT-patented Contraband Exchange System (tm). -station-event-bluespace-syndicate-ftl-interception-warning-announcement = Remote FTL procedures initialized, five minutes until Syndicate ship dissipation. -station-event-bluespace-syndicate-ftl-interception-end-announcement = In compliance with NanoTrasen FTL traffic patterns, the Syndicate Vessel has been dissipated to ensure non-collision. +station-event-bluespace-syndicate-ftl-interception-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command disrupted the FTL-jump of Syndicate vessel, according to our deepspace scanners the vessel either already entered the real space in your sector or is about to enter. Code: Intercept, Expunge, Decimate, Cauterise. Expect armed opposition, use of lethal force against enemy agents is authorized. Do note: any loss of NT-affiliated personnel lives will not be compensated. Reminder: NT personnel who are granted security clearance for the engagement are required to surrender any hazardous materials to the local security department to ensure safe transportation of Syndicate technology to CentCom for study. Should there be any prisoners, security personnel is required to prepare them for transportation to CentCom for interrogation through the NT-patented Contraband Exchange System (tm). +station-event-bluespace-syndicate-ftl-interception-warning-announcement = Remote FTL procedures initialized, five minutes until Syndicate vessel dissipation. +station-event-bluespace-syndicate-ftl-interception-end-announcement = In compliance with NanoTrasen FTL traffic patterns, the Syndicate vessel has been dissipated to ensure non-collision. -station-event-bluespace-wizardfederation-scout-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command detected a Bluespace Anomaly in your sector with the signature indicative of the imminent arrival of a Wizard Federation small vessel. Code: Intercept, Detain, Incarcerate. Arrest the intruders and prepare them for transportation to CentCom for interrogation through NT patented Contraband Exchange System (tm). +station-event-bluespace-wizardfederation-scout-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command detected a Bluespace Anomaly in your sector with the signature indicative of the imminent arrival of a small Wizard Federation vessel. Code: Intercept, Detain, Incarcerate. Arrest the intruders and prepare them for transportation to CentCom for interrogation through NT patented Contraband Exchange System (tm). station-event-bluespace-wizardfederation-scout-warning-announcement = Remote FTL procedures initialized, five minutes until Wizard Federation vessel dissipation. station-event-bluespace-wizardfederation-scout-end-announcement = In compliance with NanoTrasen FTL traffic patterns, the Wizard Federation vessel has been dissipated to ensure non-collision. -station-event-bluespace-bloodmoon-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command detected a Bluespace Anomaly in your sector with the signature indicative of the imminent arrival of a Blood Cult's Vessel. Code: Intercept, Expunge, Exterminate, Cauterise. Expect armed opposition, use of lethal force against enemy combatants is mandatory, take no prisoners. Warning! Materials on the Blood Cult's Vessel possess Level 3 Cognitohazard! Local security force is advised to take steps to limit NT personnel's exposure to hazardous materials. Reminder: NT personnel who are granted security clearance for the engagement are required to surrender any hazardous materials to the local security department for containment and undergo a medical examination afterward. +station-event-bluespace-bloodmoon-start-announcement = Attention all available NanoTrasen personnel! NanoTrasen Naval Command detected a Bluespace Anomaly in your sector with the signature indicative of the imminent arrival of a Blood Cult vessel. Code: Intercept, Expunge, Exterminate, Cauterise. Expect armed opposition, use of lethal force against enemy combatants is mandatory, take no prisoners. Warning! Materials on the Blood Cult vessel possess Level 3 Cognitohazard! Local security force is advised to take steps to limit NT personnel's exposure to hazardous materials. Reminder: NT personnel who are granted security clearance for the engagement are required to surrender any hazardous materials to the local security department for containment and undergo a medical examination afterward. station-event-bluespace-bloodmoon-warning-announcement = Remote FTL procedures initialized, five minutes until Blood Cult vessel dissipation. station-event-bluespace-bloodmoon-end-announcement = In compliance with NanoTrasen FTL traffic patterns, the Blood Cult vessel has been dissipated to ensure non-collision. From e48c52628a103122485bc79a068995758f7741fd Mon Sep 17 00:00:00 2001 From: ErhardSteinhauer <65374927+ErhardSteinhauer@users.noreply.github.com> Date: Fri, 15 Nov 2024 22:44:45 +0300 Subject: [PATCH 41/45] Frontier Weapon Mags Visual Fix (#2409) --- .../Objects/Weapons/Guns/Rifles/rifles.yml | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index 5d73ebb1a4d..2d8d5e8ad64 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -27,17 +27,17 @@ # Frontier - type: entity name: Gestio - parent: [ BaseC1Contraband, BaseWeaponRifle ] + parent: [ BaseWeaponRifle, BaseC1Contraband ] id: WeaponRifleGestio description: An old prototype burst-fire NanoTrasen marksman rifle. Manufactured by Silver Industries. It never left the trials. Given its antiquity it is considered a civilian grade weapon. Uses .30 rifle ammo. components: - type: Sprite sprite: _NF/Objects/Weapons/Guns/Rifles/gestio.rsi layers: - - state: base - map: ["enum.GunVisualLayers.Base"] - state: mag-0 map: ["enum.GunVisualLayers.Mag"] + - state: base + map: ["enum.GunVisualLayers.Base"] - type: Clothing sprite: _NF/Objects/Weapons/Guns/Rifles/gestio.rsi - type: Gun @@ -86,6 +86,7 @@ magState: mag steps: 1 zeroVisible: true + - type: Appearance - type: entity parent: WeaponRifleGestio @@ -112,7 +113,7 @@ - CartridgeLightRifle - type: entity - parent: [ BaseC1Contraband, BaseWeaponRifle ] + parent: [ BaseWeaponRifle, BaseC1Contraband ] id: WeaponRifleNovaliteC1 name: Novalite C1 description: A modification to the Lecter from SW LLC, a civilian grade semi-automatic rifle with an internal magazine. Nanotrasen Representatives can not stress how compliant this rifle is. Uses .20 rifle ammo. @@ -120,10 +121,10 @@ - type: Sprite sprite: _NF/Objects/Weapons/Guns/Rifles/novalitec1.rsi layers: - - state: base - map: ["enum.GunVisualLayers.Base"] - state: mag-0 map: ["enum.GunVisualLayers.Mag"] + - state: base + map: ["enum.GunVisualLayers.Base"] - type: Clothing sprite: _NF/Objects/Weapons/Guns/Rifles/novalitec1.rsi - type: Gun @@ -161,6 +162,7 @@ magState: mag steps: 1 zeroVisible: true + - type: Appearance - type: entity parent: WeaponRifleNovaliteC1 @@ -189,17 +191,17 @@ - type: entity id: WeaponRifleSVT name: SVT-40 - parent: [ BaseC1Contraband, BaseWeaponRifle ] + parent: [ BaseWeaponRifle, BaseC1Contraband ] description: |- Once a weapon used in war, now a civilian hunting rifle brought to you by S.E.S.W.C., "Retreating is Considered Treason" is etched on one side. components: - type: Sprite sprite: _NF/Objects/Weapons/Guns/Rifles/svt40.rsi layers: - - state: base - map: ["enum.GunVisualLayers.Base"] - state: mag-0 map: ["enum.GunVisualLayers.Mag"] + - state: base + map: ["enum.GunVisualLayers.Base"] - type: Clothing sprite: _NF/Objects/Weapons/Guns/Rifles/svt40.rsi quickEquip: false @@ -241,4 +243,5 @@ - type: MagazineVisuals magState: mag steps: 1 - zeroVisible: true \ No newline at end of file + zeroVisible: true + - type: Appearance From 85898c5d892cb8c98af137036d757cbd0ec80267 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Fri, 15 Nov 2024 19:45:10 +0000 Subject: [PATCH 42/45] Automatic Changelog (#2409) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 0d66838d561..8ff861cd9d1 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5325,3 +5325,9 @@ Entries: them in the settings! id: 5504 time: '2024-11-15T19:00:06.0000000+00:00' +- author: erhardsteinhauer + changes: + - type: Fix + message: Fixed Gestio and SVT mags visial bug. + id: 5505 + time: '2024-11-15T19:44:45.0000000+00:00' From 8cdd529b835a770b0cc15de9fa257479c5f39f7c Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Fri, 15 Nov 2024 23:53:24 +0200 Subject: [PATCH 43/45] General Bug fixing (#2410) * Update debug.yml * Mail Test * ERT Mail * Cards hand sprite * How did I fuck this up? * funny * abstract * Update MachineBoardTest.cs * telapad * Update cargo_telepad.yml * Update bowl.yml * Cleanup * Update crossbow_bolts.yml * Update warp_point.yml * Update computers_shuttle_records.yml * Update backpacks.yml --- .../Tests/MachineBoardTest.cs | 5 -- .../Consumable/Food/Containers/bowl.yml | 14 ++-- .../Entities/Structures/cargo_telepad.yml | 10 ++- .../Entities/Objects/Misc/cards.yml | 1 + .../_NF/Entities/Clothing/Back/backpacks.yml | 2 +- .../_NF/Entities/Markers/warp_point.yml | 1 + .../Objects/Consumable/Food/meals.yml | 5 ++ .../Guns/Projectiles/crossbow_bolts.yml | 3 + .../Machines/Computers/computers.yml | 79 +++++-------------- .../Computers/computers_shuttle_records.yml | 2 + Resources/Prototypes/_NF/Mail/Items/misc.yml | 9 +++ Resources/Prototypes/_NF/Maps/debug.yml | 1 - .../_NF/Recipes/Lathes/prizecounter.yml | 5 ++ .../Prototypes/_NF/Recipes/Lathes/tiles.yml | 3 + .../Roles/Jobs/Fun/emergencyresponseteam.yml | 10 +-- 15 files changed, 67 insertions(+), 83 deletions(-) diff --git a/Content.IntegrationTests/Tests/MachineBoardTest.cs b/Content.IntegrationTests/Tests/MachineBoardTest.cs index 01a4d324382..90828e7234d 100644 --- a/Content.IntegrationTests/Tests/MachineBoardTest.cs +++ b/Content.IntegrationTests/Tests/MachineBoardTest.cs @@ -93,11 +93,6 @@ await server.WaitAssertion(() => continue; var cId = cbc.Prototype; - // Frontier: we accept null as board prototypes, but this will fail the assertions. - if (cId == "Null") - continue; - // End Frontier - Assert.Multiple(() => { Assert.That(cId, Is.Not.Null, $"Computer board \"{p.ID}\" does not have a corresponding computer."); diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml index 4c9adc3c8dd..0fd3c93fef2 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml @@ -21,6 +21,10 @@ visible: false - type: MixableSolution solution: food + - type: Drink + solution: food + useSound: + path: /Audio/Items/drink.ogg - type: DamageOnLand damage: types: @@ -59,8 +63,8 @@ - type: Tag tags: - Trash - - type: StaticPrice - price: 1 + - type: StaticPrice # Frontier + price: 2 # Frontier - type: entity name: broken bowl @@ -79,7 +83,7 @@ Glass: 50 - type: SpaceGarbage - type: StaticPrice - price: 4 # Frontier: 1<4, it's BIG, mkay + price: 1 # Frontier 0<1 - type: entity name: bowl @@ -94,5 +98,5 @@ - map: ["enum.SolutionContainerLayers.Fill"] state: fill-1 visible: false - - type: StaticPrice - price: 3 + - type: StaticPrice # Frontier + price: 3 # Frontier \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/cargo_telepad.yml b/Resources/Prototypes/Entities/Structures/cargo_telepad.yml index 32a26331d59..720babc6a14 100644 --- a/Resources/Prototypes/Entities/Structures/cargo_telepad.yml +++ b/Resources/Prototypes/Entities/Structures/cargo_telepad.yml @@ -1,8 +1,8 @@ - type: entity id: CargoTelepad - parent: [BaseStructureDisableToolUse, BaseStructureIndestructible, BaseMachinePowered] # Frontier + parent: [BaseStructureDisableToolUse, BaseStructureIndestructible, ConstructibleMachine, BaseMachinePowered] # Frontier name: cargo telepad - description: Beam in the pizzas and dig in. + description: Beam in the cargo. # Frontier: What pizza? components: - type: InteractionOutline - type: Physics @@ -35,8 +35,8 @@ - type: DeviceNetwork deviceNetId: Wireless receiveFrequencyId: BasicDevice -# - type: WirelessNetworkConnection -# range: 200 +# - type: WirelessNetworkConnection # Frontier +# range: 200 # Frontier - type: DeviceLinkSink ports: - OrderReceiver @@ -47,3 +47,5 @@ board: CargoTelepadMachineCircuitboard - type: Appearance - type: CollideOnAnchor +# - type: NameIdentifier # Frontier +# group: CargoTelepads # Frontier \ No newline at end of file diff --git a/Resources/Prototypes/EstacaoPirata/Entities/Objects/Misc/cards.yml b/Resources/Prototypes/EstacaoPirata/Entities/Objects/Misc/cards.yml index 6e7ebbfe6d0..0c5fb8ff4d2 100644 --- a/Resources/Prototypes/EstacaoPirata/Entities/Objects/Misc/cards.yml +++ b/Resources/Prototypes/EstacaoPirata/Entities/Objects/Misc/cards.yml @@ -39,6 +39,7 @@ abstract: true components: - type: Item + sprite: EstacaoPirata/Objects/Misc/cards.rsi # Frontier size: Small - type: CardStack - type: ContainerContainer # Frontier diff --git a/Resources/Prototypes/_NF/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/_NF/Entities/Clothing/Back/backpacks.yml index f79d15c806f..a47232a75d9 100644 --- a/Resources/Prototypes/_NF/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/_NF/Entities/Clothing/Back/backpacks.yml @@ -17,7 +17,7 @@ sprite: _NF/Clothing/Back/Backpacks/pilot.rsi - type: entity - parent: ClothingBackpackERTLeader + parent: ClothingBackpackERTJanitor id: ClothingBackpackERTMailCarrier name: ERT mail carrier backpack description: A spacious backpack with lots of pockets, worn by Mail Carrier's of an Emergency Response Team. diff --git a/Resources/Prototypes/_NF/Entities/Markers/warp_point.yml b/Resources/Prototypes/_NF/Entities/Markers/warp_point.yml index a51b91cc53d..dd2d4f3443b 100644 --- a/Resources/Prototypes/_NF/Entities/Markers/warp_point.yml +++ b/Resources/Prototypes/_NF/Entities/Markers/warp_point.yml @@ -14,3 +14,4 @@ components: - type: WarpPoint queryGridName: true + location: grid \ No newline at end of file diff --git a/Resources/Prototypes/_NF/Entities/Objects/Consumable/Food/meals.yml b/Resources/Prototypes/_NF/Entities/Objects/Consumable/Food/meals.yml index 6a384597b92..b2e97478caf 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Consumable/Food/meals.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Consumable/Food/meals.yml @@ -65,6 +65,8 @@ damage: groups: Brute: 1 + - type: Appearance + - type: DeepFried - type: FriedTrait - type: entity @@ -76,6 +78,9 @@ components: - type: FriedTrait crispinessLevelSet: Spectral + - type: FlavorProfile + flavors: + - spooky - type: entity name: dragon omelette diff --git a/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Projectiles/crossbow_bolts.yml b/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Projectiles/crossbow_bolts.yml index ba80259472f..ad2e0bf18ca 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Projectiles/crossbow_bolts.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Projectiles/crossbow_bolts.yml @@ -565,6 +565,9 @@ damage: types: Blunt: 30 # Should prevent re-using + - type: ContainerContainer + containers: + cluster-payload: !type:Container # Blood cult - type: entity diff --git a/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers.yml index 2604bc81755..e7916dfbac1 100644 --- a/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers.yml @@ -23,7 +23,7 @@ - type: entity name: cargo sale computer suffix: Normal - parent: [BaseStructureDisableToolUse, BaseStructureIndestructible, BaseComputerAiAccess] + parent: [BaseStructureDisableToolUse, BaseStructureIndestructible, BaseComputer] id: ComputerPalletConsoleNFMarket description: Used to sell goods loaded onto cargo pallets. abstract: true @@ -98,7 +98,7 @@ - type: entity name: contraband exchange computer - parent: [BaseStructureDisableToolUse, BaseStructureIndestructible, BaseComputerAiAccess] + parent: [BaseStructureDisableToolUse, BaseStructureIndestructible, BaseComputer] id: ComputerContrabandPalletConsole description: Used to exchange contraband for Frontier Uplink Coins. components: @@ -169,69 +169,26 @@ - type: entity name: cargo market computer abstract: true - parent: [BaseStructureDisableToolUse, BaseStructureIndestructible, BaseStructureComputer] + parent: [BaseStructureDisableToolUse, BaseStructureIndestructible, BaseComputer] id: ComputerMarketConsoleNFBase description: Used to buy goods from the station's market system. placement: mode: SnapgridCenter components: - - type: MeleeSound - soundGroups: - Brute: - collection: MetalGlassBreak - - type: Computer - - type: ApcPowerReceiver - powerLoad: 200 - - type: ExtensionCableReceiver - - type: ActivatableUIRequiresPower - - type: Sprite - netsync: false - noRot: true - sprite: Structures/Machines/computers.rsi - layers: - - map: ["computerLayerBody"] - state: computer - - map: ["computerLayerKeyboard"] - state: generic_keyboard - - map: ["computerLayerScreen"] - state: request - - map: ["computerLayerKeys"] - state: tech_key - - type: Appearance - - type: GenericVisualizer - visuals: - enum.ComputerVisuals.Powered: - computerLayerScreen: - True: { visible: true, shader: unshaded } - False: { visible: false } - computerLayerKeys: - True: { visible: true, shader: unshaded } - False: { visible: true, shader: shaded } - - type: LitOnPowered - - type: PointLight - radius: 1.5 - energy: 1.6 - color: "#b89f25" - enabled: false - mask: /Textures/Effects/LightMasks/cone.png - autoRot: true - offset: "0, 0.4" # shine from the top, not bottom of the computer - castShadows: false - - type: EmitSoundOnUIOpen - sound: - collection: Keyboard - - type: MarketConsole - - type: ActivatableUI - key: enum.MarketConsoleUiKey.Default - - type: UserInterface - interfaces: - enum.MarketConsoleUiKey.Default: - type: MarketConsoleBoundUserInterface - enum.WiresUiKey.Key: - type: WiresBoundUserInterface - - type: MarketModifier - mod: 1 - + - type: MarketConsole + - type: ActivatableUI + key: enum.MarketConsoleUiKey.Default + - type: UserInterface + interfaces: + enum.MarketConsoleUiKey.Default: + type: MarketConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface + - type: MarketModifier + mod: 1 + - type: Computer + board: Null + - type: entity name: cargo market computer parent: ComputerMarketConsoleNFBase @@ -252,7 +209,7 @@ - type: entity id: ComputerPirateBounty - parent: BaseComputerAiAccess + parent: BaseComputer name: pirate bounty computer description: Avast, get ye pirate bounties here. components: diff --git a/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers_shuttle_records.yml b/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers_shuttle_records.yml index bbe8169bb87..6a0ab01b00e 100644 --- a/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers_shuttle_records.yml +++ b/Resources/Prototypes/_NF/Entities/Structures/Machines/Computers/computers_shuttle_records.yml @@ -36,6 +36,8 @@ - type: ItemSlots - type: ContainerContainer containers: + board: !type:Container + ents: [] ShuttleRecordsConsole-targetId: !type:ContainerSlot {} - type: AccessReader access: [[ "HeadOfPersonnel" ]] diff --git a/Resources/Prototypes/_NF/Mail/Items/misc.yml b/Resources/Prototypes/_NF/Mail/Items/misc.yml index 6adcee5b29e..6ad8d5986d2 100644 --- a/Resources/Prototypes/_NF/Mail/Items/misc.yml +++ b/Resources/Prototypes/_NF/Mail/Items/misc.yml @@ -7,6 +7,9 @@ name: delayed smoke suffix: "(10s)" components: + - type: Sprite + sprite: error.rsi + state: error - type: DelayedItem item: AdminInstantEffectSmoke10 @@ -26,6 +29,9 @@ categories: [ HideSpawnMenu ] name: delayed EMP (7 meters) components: + - type: Sprite + sprite: error.rsi + state: error - type: DelayedItem item: AdminInstantEffectEMP7 @@ -38,6 +44,9 @@ categories: [ HideSpawnMenu ] name: delayed emotional support pet components: + - type: Sprite + sprite: error.rsi + state: error - type: DelayedItem item: PetCarrierNPCEmotionalSupportSafe diff --git a/Resources/Prototypes/_NF/Maps/debug.yml b/Resources/Prototypes/_NF/Maps/debug.yml index 1149b533a0a..832f072e3e0 100644 --- a/Resources/Prototypes/_NF/Maps/debug.yml +++ b/Resources/Prototypes/_NF/Maps/debug.yml @@ -32,6 +32,5 @@ PirateFirstMate: [ -1, -1] Pirate: [ -1, -1] Prisoner: [ -1, -1] - Borg: [ -1, -1] - type: StationDeadDrop maxDeadDrops: 20 # Testing \ No newline at end of file diff --git a/Resources/Prototypes/_NF/Recipes/Lathes/prizecounter.yml b/Resources/Prototypes/_NF/Recipes/Lathes/prizecounter.yml index 04c2717868e..69303ddf05a 100644 --- a/Resources/Prototypes/_NF/Recipes/Lathes/prizecounter.yml +++ b/Resources/Prototypes/_NF/Recipes/Lathes/prizecounter.yml @@ -1,29 +1,34 @@ # Base prototypes - type: latheRecipe + abstract: true id: BasePrizeRecipe applyMaterialDiscount: false completetime: 4 - type: latheRecipe + abstract: true id: BasePrize10Recipe parent: BasePrizeRecipe materials: PrizeTicket: 10 - type: latheRecipe + abstract: true id: BasePrize15Recipe parent: BasePrizeRecipe materials: PrizeTicket: 15 - type: latheRecipe + abstract: true id: BasePrize20Recipe parent: BasePrizeRecipe materials: PrizeTicket: 20 - type: latheRecipe + abstract: true id: BasePrize50Recipe parent: BasePrizeRecipe materials: diff --git a/Resources/Prototypes/_NF/Recipes/Lathes/tiles.yml b/Resources/Prototypes/_NF/Recipes/Lathes/tiles.yml index 1e9104f02c7..03d1fadbf2b 100644 --- a/Resources/Prototypes/_NF/Recipes/Lathes/tiles.yml +++ b/Resources/Prototypes/_NF/Recipes/Lathes/tiles.yml @@ -1,6 +1,7 @@ # Base prototypes - type: latheRecipe + abstract: true id: NFBaseFloorTileRecipe applyMaterialDiscount: false completetime: 0.5 @@ -8,12 +9,14 @@ Steel: 25 - type: latheRecipe + abstract: true id: NFBaseFloorTileSilverRecipe parent: NFBaseFloorTileRecipe materials: Silver: 25 - type: latheRecipe + abstract: true id: NFBaseFloorTileClothRecipe parent: NFBaseFloorTileRecipe materials: diff --git a/Resources/Prototypes/_NF/Roles/Jobs/Fun/emergencyresponseteam.yml b/Resources/Prototypes/_NF/Roles/Jobs/Fun/emergencyresponseteam.yml index 85b697e4f47..f52efade296 100644 --- a/Resources/Prototypes/_NF/Roles/Jobs/Fun/emergencyresponseteam.yml +++ b/Resources/Prototypes/_NF/Roles/Jobs/Fun/emergencyresponseteam.yml @@ -31,9 +31,8 @@ pocket2: DoubleEmergencyAirTankFilled storage: back: - - SecBreachingHammer - - WeaponMailLake - - BoxSurvivalEngineering +# - SecBreachingHammer +# - WeaponMailLake - RubberStampCentcom - BoxFolderCentCom @@ -53,8 +52,7 @@ pocket2: DoubleEmergencyAirTankFilled storage: back: - - SecBreachingHammer - - WeaponMailLake - - BoxSurvivalEngineering +# - SecBreachingHammer +# - WeaponMailLake - RubberStampCentcom - BoxFolderCentCom \ No newline at end of file From a2df4fca11d4de9c04f524f6883be3c31938e233 Mon Sep 17 00:00:00 2001 From: Dvir <39403717+dvir001@users.noreply.github.com> Date: Sat, 16 Nov 2024 00:28:27 +0200 Subject: [PATCH 44/45] Clean AI comps on death (#2394) * Cleanup comps from dead AI * Update SalvageMobRestrictionsSystem.cs * Update SalvageMobRestrictionsSystem.cs * Move to comps * Update mob_hostile_base.yml * Fixed missing comment * Restore AdvertiseComponent --------- Co-authored-by: Whatstone --- .../NFSalvageMobRestrictionsComponent.cs | 26 +++++++ .../Salvage/SalvageMobRestrictionsSystem.cs | 23 +++++-- .../Entities/Mobs/NPCs/mob_hostile_base.yml | 68 ++++++++++++++++--- .../Mobs/NPCs/mob_hostile_rogue_ai.yml | 2 +- .../_NF/Entities/Mobs/NPCs/pets.yml | 2 + 5 files changed, 105 insertions(+), 16 deletions(-) diff --git a/Content.Server/_NF/Salvage/NFSalvageMobRestrictionsComponent.cs b/Content.Server/_NF/Salvage/NFSalvageMobRestrictionsComponent.cs index ab3a1e72f98..3bb39c05c05 100644 --- a/Content.Server/_NF/Salvage/NFSalvageMobRestrictionsComponent.cs +++ b/Content.Server/_NF/Salvage/NFSalvageMobRestrictionsComponent.cs @@ -1,3 +1,5 @@ +using Robust.Shared.Prototypes; + namespace Content.Server._NF.Salvage; /// @@ -19,4 +21,28 @@ public sealed partial class NFSalvageMobRestrictionsComponent : Component /// [DataField] public bool DespawnIfOffLinkedGrid = true; + + /// + /// Components to be added on death. + /// + [DataField] + public ComponentRegistry AddComponentsOnDeath { get; set; } = new(); + + /// + /// Components to be removed on death. + /// + [DataField] + public ComponentRegistry RemoveComponentsOnDeath { get; set; } = new(); + + /// + /// Components to be added on revivel. + /// + [DataField] + public ComponentRegistry AddComponentsOnRevival { get; set; } = new(); + + /// + /// Components to be removed on revival. + /// + [DataField] + public ComponentRegistry RemoveComponentsOnRevival { get; set; } = new(); } diff --git a/Content.Server/_NF/Salvage/SalvageMobRestrictionsSystem.cs b/Content.Server/_NF/Salvage/SalvageMobRestrictionsSystem.cs index be6efb31c9b..fd5faf385e6 100644 --- a/Content.Server/_NF/Salvage/SalvageMobRestrictionsSystem.cs +++ b/Content.Server/_NF/Salvage/SalvageMobRestrictionsSystem.cs @@ -2,6 +2,8 @@ using Content.Shared.Body.Components; using Content.Server.Body.Systems; using Content.Server.Explosion.EntitySystems; +using Content.Shared.Mobs; +using Robust.Shared.Prototypes; namespace Content.Server._NF.Salvage; @@ -10,6 +12,7 @@ public sealed class SalvageMobRestrictionsSystem : EntitySystem [Dependency] private readonly DamageableSystem _damageableSystem = default!; [Dependency] private readonly BodySystem _body = default!; [Dependency] private readonly ExplosionSystem _explosion = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; public override void Initialize() { @@ -18,6 +21,7 @@ public override void Initialize() SubscribeLocalEvent(OnInit); SubscribeLocalEvent(OnRemove); SubscribeLocalEvent(OnRemoveGrid); + SubscribeLocalEvent(OnMobState); } private void OnInit(EntityUid uid, NFSalvageMobRestrictionsComponent component, ComponentInit args) @@ -67,11 +71,20 @@ private void OnRemoveGrid(EntityUid uid, SalvageMobRestrictionsGridComponent com _explosion.QueueExplosion(target, ExplosionSystem.DefaultExplosionPrototypeId, 5, 10, 5); Del(target); } - // Old implementation - //else if (TryComp(target, out DamageableComponent? dc)) - //{ - // _damageableSystem.SetAllDamage(target, dc, 200); - //} + } + } + + private void OnMobState(EntityUid uid, NFSalvageMobRestrictionsComponent component, MobStateChangedEvent args) + { + if (args.NewMobState == MobState.Dead) + { + EntityManager.AddComponents(uid, component.AddComponentsOnDeath); + EntityManager.RemoveComponents(uid, component.RemoveComponentsOnDeath); + } + else if (args.OldMobState == MobState.Dead) + { + EntityManager.AddComponents(uid, component.AddComponentsOnRevival); + EntityManager.RemoveComponents(uid, component.RemoveComponentsOnRevival); } } } diff --git a/Resources/Prototypes/_NF/Entities/Mobs/NPCs/mob_hostile_base.yml b/Resources/Prototypes/_NF/Entities/Mobs/NPCs/mob_hostile_base.yml index 3cf9cf73084..a9fb50e6de8 100644 --- a/Resources/Prototypes/_NF/Entities/Mobs/NPCs/mob_hostile_base.yml +++ b/Resources/Prototypes/_NF/Entities/Mobs/NPCs/mob_hostile_base.yml @@ -88,6 +88,64 @@ id: NFMobRestrictions components: - type: NFSalvageMobRestrictions + addComponentsOnDeath: + - type: Uncloneable + - type: Unrevivable + - type: Strippable + - type: UserInterface + interfaces: + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface + removeComponentsOnDeath: + - type: Insulated + - type: Reflect + - type: MovementIgnoreGravity + - type: Tool + - type: Prying + - type: CanMoveInAir + - type: Tag + - type: Access + - type: Timer + - type: TimedSpawner + - type: Advertise + pack: FuelVendAds # placeholder, required field, unused + +- type: entity + abstract: true + id: NFMobRestrictionsSilicon + components: + - type: NFSalvageMobRestrictions + addComponentsOnDeath: + - type: Strippable + - type: UserInterface + interfaces: + enum.StrippingUiKey.Key: + type: StrippableBoundUserInterface + removeComponentsOnDeath: +# - type: Pullable # TODO: This makes the mob stuck to your hand if it dies when you pull it + - type: Carriable # Carrying system from nyanotrasen. + - type: Tool + - type: Prying + - type: MovementIgnoreGravity + addComponentsOnRevival: +# - type: Pullable # TODO: This makes the mob stuck to your hand if it dies when you pull it + - type: Carriable # Carrying system from nyanotrasen. + - type: Tool + speedModifier: 1.5 + qualities: + - Prying + - type: Prying + pryPowered: !type:Bool + true + force: !type:Bool + true + useSound: + path: /Audio/Items/crowbar.ogg + speedModifier: 10.0 + - type: MovementIgnoreGravity + removeComponentsOnRevival: + - type: Strippable + - type: UserInterface - type: entity abstract: true @@ -226,11 +284,6 @@ - type: Inventory templateId: hostilehumanoid # Supports loadouts - type: InventorySlots - - type: Strippable - - type: UserInterface - interfaces: - enum.StrippingUiKey.Key: - type: StrippableBoundUserInterface - type: entity # Slots for loot containers: pockets, belt, back save: false @@ -240,11 +293,6 @@ - type: Inventory templateId: hostilehumanoidsimplified # Does not support loadouts - type: InventorySlots - - type: Strippable - - type: UserInterface - interfaces: - enum.StrippingUiKey.Key: - type: StrippableBoundUserInterface # AI packages - type: entity diff --git a/Resources/Prototypes/_NF/Entities/Mobs/NPCs/mob_hostile_rogue_ai.yml b/Resources/Prototypes/_NF/Entities/Mobs/NPCs/mob_hostile_rogue_ai.yml index edbec494f2c..3629a28ff62 100644 --- a/Resources/Prototypes/_NF/Entities/Mobs/NPCs/mob_hostile_rogue_ai.yml +++ b/Resources/Prototypes/_NF/Entities/Mobs/NPCs/mob_hostile_rogue_ai.yml @@ -48,7 +48,7 @@ - MobHumanoidInvetorySimplified - MobRogueSiliconAISimpleRanged #- MobLaserReflect # Added to prevent laser abuse from players - - NFMobRestrictions + - NFMobRestrictionsSilicon id: MobRogueSiliconBase components: - type: Damageable diff --git a/Resources/Prototypes/_NF/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/_NF/Entities/Mobs/NPCs/pets.yml index 97e18c8d479..ae25124c938 100644 --- a/Resources/Prototypes/_NF/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/_NF/Entities/Mobs/NPCs/pets.yml @@ -178,6 +178,8 @@ - DinosaursNF - type: NFSalvageMobRestrictions despawnIfOffLinkedGrid: false + addComponentsOnDeath: [] + removeComponentsOnDeath: [] - type: entity name: Mistake From a1c1dbd84722211a31d75ec954ecdfed8b960035 Mon Sep 17 00:00:00 2001 From: FrontierATC Date: Fri, 15 Nov 2024 22:28:52 +0000 Subject: [PATCH 45/45] Automatic Changelog (#2394) --- Resources/Changelog/Frontier.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Resources/Changelog/Frontier.yml b/Resources/Changelog/Frontier.yml index 8ff861cd9d1..ddf1c1e6377 100644 --- a/Resources/Changelog/Frontier.yml +++ b/Resources/Changelog/Frontier.yml @@ -5331,3 +5331,9 @@ Entries: message: Fixed Gestio and SVT mags visial bug. id: 5505 time: '2024-11-15T19:44:45.0000000+00:00' +- author: dvir001 + changes: + - type: Tweak + message: Most mobs can only be stripped of items after they have been killed. + id: 5506 + time: '2024-11-15T22:28:27.0000000+00:00'