diff --git a/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs b/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs index 7dcd42e06fa..a2db3c2b677 100644 --- a/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs +++ b/Content.Server/Gateway/Systems/GatewayGeneratorSystem.cs @@ -184,7 +184,7 @@ private void OnGeneratorOpen(Entity ent, r var dungeonRotation = _dungeon.GetDungeonRotation(seed); var dungeonPosition = (origin + dungeonRotation.RotateVec(new Vector2i(0, dungeonDistance))).Floored(); - _dungeon.GenerateDungeon(_protoManager.Index("Experiment"), args.MapUid, grid, dungeonPosition, seed); + _dungeon.GenerateDungeon(_protoManager.Index("Experiment"), "Experiment", args.MapUid, grid, dungeonPosition, seed); // Frontier: added "Experiment" // TODO: Dungeon mobs + loot. diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.cs index cdb5eb08055..5973c11fe40 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.cs @@ -55,6 +55,7 @@ public sealed partial class DungeonJob : Job> private readonly EntityCoordinates? _targetCoordinates; private readonly ISawmill _sawmill; + private readonly string _genId; // Frontier: add ID public DungeonJob( ISawmill sawmill, @@ -73,6 +74,7 @@ public DungeonJob( EntityUid gridUid, int seed, Vector2i position, + string genID, // Frontier EntityCoordinates? targetCoordinates = null, CancellationToken cancellation = default) : base(maxTime, cancellation) { @@ -99,6 +101,7 @@ public DungeonJob( _seed = seed; _position = position; _targetCoordinates = targetCoordinates; + _genId = genID; // Frontier } /// @@ -144,7 +147,7 @@ private async Task> GetDungeons( protected override async Task?> Process() { - _sawmill.Info($"Generating dungeon {_gen} with seed {_seed} on {_entManager.ToPrettyString(_gridUid)}"); + _sawmill.Info($"Generating dungeon {_genId} with seed {_seed} on {_entManager.ToPrettyString(_gridUid)}"); // Frontier: _gen<_genId _grid.CanSplit = false; var random = new Random(_seed); var position = (_position + random.NextPolarVector2(_gen.MinOffset, _gen.MaxOffset)).Floored(); diff --git a/Content.Server/Procedural/DungeonSystem.Commands.cs b/Content.Server/Procedural/DungeonSystem.Commands.cs index 51a6a57bbeb..6149d1f8a24 100644 --- a/Content.Server/Procedural/DungeonSystem.Commands.cs +++ b/Content.Server/Procedural/DungeonSystem.Commands.cs @@ -71,7 +71,7 @@ private async void GenerateDungeon(IConsoleShell shell, string argstr, string[] } shell.WriteLine(Loc.GetString("cmd-dungen-start", ("seed", seed))); - GenerateDungeon(dungeon, dungeonUid, dungeonGrid, position, seed); + GenerateDungeon(dungeon, dungeon.ID, dungeonUid, dungeonGrid, position, seed); // Frontier: add dungeon.ID } private CompletionResult CompletionCallback(IConsoleShell shell, string[] args) diff --git a/Content.Server/Procedural/DungeonSystem.cs b/Content.Server/Procedural/DungeonSystem.cs index 6fe8414f74e..a8a58acc419 100644 --- a/Content.Server/Procedural/DungeonSystem.cs +++ b/Content.Server/Procedural/DungeonSystem.cs @@ -188,6 +188,7 @@ public MapId GetOrCreateTemplate(DungeonRoomPrototype proto) /// /// Coordinates to move the dungeon to afterwards. Will delete the original map public void GenerateDungeon(DungeonConfig gen, + string genID, // Frontier EntityUid gridUid, MapGridComponent grid, Vector2i position, @@ -212,6 +213,7 @@ public void GenerateDungeon(DungeonConfig gen, gridUid, seed, position, + genID, // Frontier coordinates, cancelToken.Token); @@ -221,6 +223,7 @@ public void GenerateDungeon(DungeonConfig gen, public async Task> GenerateDungeonAsync( DungeonConfig gen, + string genID, // Frontier EntityUid gridUid, MapGridComponent grid, Vector2i position, @@ -244,6 +247,7 @@ public async Task> GenerateDungeonAsync( gridUid, seed, position, + genID, // Frontier null, cancelToken.Token); diff --git a/Content.Server/Salvage/SalvageSystem.Magnet.cs b/Content.Server/Salvage/SalvageSystem.Magnet.cs index 81db78fb201..d124f988cce 100644 --- a/Content.Server/Salvage/SalvageSystem.Magnet.cs +++ b/Content.Server/Salvage/SalvageSystem.Magnet.cs @@ -268,12 +268,12 @@ private async Task TakeMagnetOffer(Entity data, int { case AsteroidOffering asteroid: var grid = _mapManager.CreateGridEntity(salvMap); - await _dungeon.GenerateDungeonAsync(asteroid.DungeonConfig, grid.Owner, grid.Comp, Vector2i.Zero, seed); + await _dungeon.GenerateDungeonAsync(asteroid.DungeonConfig, asteroid.Id, grid.Owner, grid.Comp, Vector2i.Zero, seed); // Frontier: added asteroid.Id - FIXME: value makes no sense. break; case DebrisOffering debris: var debrisProto = _prototypeManager.Index(debris.Id); var debrisGrid = _mapManager.CreateGridEntity(salvMap); - await _dungeon.GenerateDungeonAsync(debrisProto, debrisGrid.Owner, debrisGrid.Comp, Vector2i.Zero, seed); + await _dungeon.GenerateDungeonAsync(debrisProto, debrisProto.ID, debrisGrid.Owner, debrisGrid.Comp, Vector2i.Zero, seed); // Frontier: debrisProto.ID break; case SalvageOffering wreck: var salvageProto = wreck.SalvageMap; diff --git a/Content.Server/Salvage/SpawnSalvageMissionJob.cs b/Content.Server/Salvage/SpawnSalvageMissionJob.cs index ed50b0461d7..71284dae2d4 100644 --- a/Content.Server/Salvage/SpawnSalvageMissionJob.cs +++ b/Content.Server/Salvage/SpawnSalvageMissionJob.cs @@ -234,7 +234,7 @@ private async Task InternalProcess() // Frontier: make process an internal dungeonOffset = dungeonRotation.RotateVec(dungeonOffset); var dungeonMod = _prototypeManager.Index(mission.Dungeon); var dungeonConfig = _prototypeManager.Index(dungeonMod.Proto); - var dungeons = await WaitAsyncTask(_dungeon.GenerateDungeonAsync(dungeonConfig, mapUid, grid, (Vector2i) dungeonOffset, + var dungeons = await WaitAsyncTask(_dungeon.GenerateDungeonAsync(dungeonConfig, dungeonConfig.ID, mapUid, grid, (Vector2i) dungeonOffset, // Frontier: add dungeonConfig.ID _missionParams.Seed)); dungeon = dungeons.First(); diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs index dc2b929ac1b..a7613b46d6d 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.GridFill.cs @@ -120,7 +120,7 @@ private bool TryDungeonSpawn(Entity targetGrid, DungeonSpawnG var spawnedGrid = _mapManager.CreateGridEntity(mapId); _transform.SetMapCoordinates(spawnedGrid, new MapCoordinates(Vector2.Zero, mapId)); - _dungeon.GenerateDungeon(dungeonProto, spawnedGrid.Owner, spawnedGrid.Comp, Vector2i.Zero, _random.Next(), spawnCoords); + _dungeon.GenerateDungeon(dungeonProto, dungeonProto.ID, spawnedGrid.Owner, spawnedGrid.Comp, Vector2i.Zero, _random.Next(), spawnCoords); // Frontier: add dungeonProto.ID spawned = spawnedGrid.Owner; return true; diff --git a/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs b/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs index def26963b99..c6b88987d95 100644 --- a/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs +++ b/Content.Server/_NF/GameRule/NfAdventureRuleSystem.cs @@ -166,6 +166,9 @@ protected override void Started(EntityUid uid, AdventureRuleComponent component, foreach (var dunGen in dungenTypes) { + if (dunGen.SkipDungeonGen) + continue; + var seed = _random.Next(); var offset = GetRandomPOICoord(3000f, 8500f, true); if (!_map.TryLoad(_mapId, "/Maps/_NF/Dungeon/spaceplatform.yml", out var grids, @@ -184,7 +187,7 @@ protected override void Started(EntityUid uid, AdventureRuleComponent component, //pls fit the grid I beg, this is so hacky //its better now but i think i need to do a normalization pass on the dungeon configs //because they are all offset. confirmed good size grid, just need to fix all the offsets. - _dunGen.GenerateDungeon(dunGen, grids[0], mapGrid, new Vector2i(0, 0), seed); + _dunGen.GenerateDungeon(dunGen, dunGen.ID, grids[0], mapGrid, new Vector2i(0, 0), seed); AddStationCoordsToSet(offset); } } diff --git a/Content.Shared/Procedural/DungeonConfig.cs b/Content.Shared/Procedural/DungeonConfig.cs index c4093741ec0..2b2ced9685d 100644 --- a/Content.Shared/Procedural/DungeonConfig.cs +++ b/Content.Shared/Procedural/DungeonConfig.cs @@ -53,4 +53,9 @@ public sealed class DungeonConfigPrototype : DungeonConfig, IPrototype { [IdDataField] public string ID { get; private set; } = default!; + + // Frontier: skip dungeon generation + [DataField] + public bool SkipDungeonGen = false; + // End Frontier } diff --git a/Resources/Prototypes/Procedural/dungeon_configs.yml b/Resources/Prototypes/Procedural/dungeon_configs.yml index 89bf1b058b4..c87c86f9b97 100644 --- a/Resources/Prototypes/Procedural/dungeon_configs.yml +++ b/Resources/Prototypes/Procedural/dungeon_configs.yml @@ -1,6 +1,7 @@ # Base configs - type: dungeonConfig id: PlanetBase + skipDungeonGen: true # Frontier layers: - !type:PrefabDunGen presets: @@ -125,7 +126,7 @@ Entrance: LavaBrigEntrance EntranceFlank: BaseWindow Junction: BaseAirlock - WallMounts: NanoTrasenFasilityWallmounts # Frontier: ScienceLabsWalls