Add more dungeon layouts (#14924)

This commit is contained in:
metalgearsloth
2023-03-31 16:54:17 +11:00
committed by GitHub
parent 732cb8b0d6
commit b6a735774b
6 changed files with 219 additions and 10 deletions

View File

@@ -101,4 +101,131 @@ public sealed partial class DungeonSystem
return CompletionResult.Empty;
}
[AdminCommand(AdminFlags.Mapping)]
private void DungeonPackVis(IConsoleShell shell, string argstr, string[] args)
{
if (args.Length != 2)
{
return;
}
if (!int.TryParse(args[0], out var mapInt))
{
return;
}
var mapId = new MapId(mapInt);
var mapUid = _mapManager.GetMapEntityId(mapId);
if (!_prototype.TryIndex<DungeonRoomPackPrototype>(args[1], out var pack))
{
return;
}
var grid = EnsureComp<MapGridComponent>(mapUid);
var tile = new Tile(_tileDefManager["FloorSteel"].TileId);
var tiles = new List<(Vector2i, Tile)>();
foreach (var room in pack.Rooms)
{
for (var x = room.Left; x < room.Right; x++)
{
for (var y = room.Bottom; y < room.Top; y++)
{
var index = new Vector2i(x, y);
tiles.Add((index, tile));
}
}
}
// Fill the rest out with a blank tile to make it easier to see
var dummyTile = new Tile(_tileDefManager["FloorAsteroidIronsand1"].TileId);
for (var x = 0; x < pack.Size.X; x++)
{
for (var y = 0; y < pack.Size.Y; y++)
{
var index = new Vector2i(x, y);
if (tiles.Contains((index, tile)))
continue;
tiles.Add((index, dummyTile));
}
}
grid.SetTiles(tiles);
shell.WriteLine(Loc.GetString("cmd-dungen_pack_vis"));
}
[AdminCommand(AdminFlags.Mapping)]
private void DungeonPresetVis(IConsoleShell shell, string argstr, string[] args)
{
if (args.Length != 2)
{
return;
}
if (!int.TryParse(args[0], out var mapInt))
{
return;
}
var mapId = new MapId(mapInt);
var mapUid = _mapManager.GetMapEntityId(mapId);
if (!_prototype.TryIndex<DungeonPresetPrototype>(args[1], out var preset))
{
return;
}
var grid = EnsureComp<MapGridComponent>(mapUid);
var tile = new Tile(_tileDefManager["FloorSteel"].TileId);
var tiles = new List<(Vector2i, Tile)>();
foreach (var room in preset.RoomPacks)
{
for (var x = room.Left; x < room.Right; x++)
{
for (var y = room.Bottom; y < room.Top; y++)
{
var index = new Vector2i(x, y);
tiles.Add((index, tile));
}
}
}
grid.SetTiles(tiles);
shell.WriteLine(Loc.GetString("cmd-dungen_pack_vis"));
}
private CompletionResult PresetCallback(IConsoleShell shell, string[] args)
{
if (args.Length == 1)
{
return CompletionResult.FromHintOptions(CompletionHelper.MapIds(EntityManager), Loc.GetString("cmd-dungen-hint-map"));
}
if (args.Length == 2)
{
return CompletionResult.FromOptions(CompletionHelper.PrototypeIDs<DungeonPresetPrototype>(proto: _prototype));
}
return CompletionResult.Empty;
}
private CompletionResult PackCallback(IConsoleShell shell, string[] args)
{
if (args.Length == 1)
{
return CompletionResult.FromHintOptions(CompletionHelper.MapIds(EntityManager), Loc.GetString("cmd-dungen-hint-map"));
}
if (args.Length == 2)
{
return CompletionResult.FromOptions(CompletionHelper.PrototypeIDs<DungeonRoomPackPrototype>(proto: _prototype));
}
return CompletionResult.Empty;
}
}

View File

@@ -40,6 +40,8 @@ public sealed partial class DungeonSystem : EntitySystem
base.Initialize();
_sawmill = Logger.GetSawmill("dungen");
_console.RegisterCommand("dungen", Loc.GetString("cmd-dungen-desc"), Loc.GetString("cmd-dungen-help"), GenerateDungeon, CompletionCallback);
_console.RegisterCommand("dungen_preset_vis", Loc.GetString("cmd-dungen_preset_vis-desc"), Loc.GetString("cmd-dungen_preset_vis-help"), DungeonPresetVis, PresetCallback);
_console.RegisterCommand("dungen_pack_vis", Loc.GetString("cmd-dungen_pack_vis-desc"), Loc.GetString("cmd-dungen_pack_vis-help"), DungeonPackVis, PackCallback);
_prototype.PrototypesReloaded += PrototypeReload;
SubscribeLocalEvent<RoundStartingEvent>(OnRoundStart);
}

View File

@@ -13,3 +13,10 @@ cmd-dungen-hint-config = Dungeon config
cmd-dungen-hint-posx = Position X
cmd-dungen-hint-posy = Position Y
cmd-dungen-hint-seed = [Seed]
cmd-dungen_preset_vis-desc = Generates a tile-based preview of a dungeon preset.
cmd-dungen_preset_vis-help = dungen_preset_vis <mapid> <preset>
cmd-dungen_pack_vis-success = Success
cmd-dungen_pack_vis-desc = Generates a tile-based preview of a dungeon pack.
cmd-dungen_pack_vis-help = dungen_pack_vis <mapid> <pack>

View File

@@ -5,6 +5,8 @@
- SalvageExperiment
presets:
- Cross
- SpaceMan
- FourSquare
postGeneration:
- !type:MiddleConnectionPostGen
overlapCount: 3
@@ -64,6 +66,8 @@
- LavaBrig
presets:
- Cross
- SpaceMan
- FourSquare
postGeneration:
- !type:MiddleConnectionPostGen
overlapCount: 3

View File

@@ -10,3 +10,28 @@
- -2,36,3,53
- -20,18,-3,35
- 4,18,21,35
# Two stumpy legs at the bottom, middle torso, then fat top
- type: dungeonPreset
id: SpaceMan
roomPacks:
- -14,0,-9,17
- -8,12,9,17
- 10,0,15,17
- -8,18,-3,23
- 4,18,9,23
- -2,18,3,35
- -8,36,9,53
- -14,36,-9,53
- 10,36,15,53
- type: dungeonPreset
id: FourSquare
roomPacks:
- -26,-5,-9,12
- 4,13,21,30
- 34,-5,51,12
- 4,-23,21,-6
- 10,-5,15,12
- -8,1,9,6
- 16,1,33,6

View File

@@ -40,18 +40,38 @@
- 7,9,12,16
- 1,5,6,12
# 17x5 corridor through middle with 2 7x5 rooms off to the side.
- type: dungeonRoomPack
id: LargeArea6
size: 17,17
rooms:
- 0,6,17,11
- 0,0,7,5
- 10,0,17,5
# 3x7 corridor leading to 7x7 room.
- type: dungeonRoomPack
id: LargeArea7
size: 17,17
rooms:
- 0,7,7,10
- 8,5,15,12
# 17x5 corridor to 7x7
- type: dungeonRoomPack
id: LargeArea8
size: 17,17
rooms:
- 0,1,17,6
- 5,7,12,14
# Medium
# Whole area room
#- type: dungeonRoomPack
# id: MediumArea1
# size: 5,17
# rooms:
# - 0,6,15,9
# - 11,12,16,17
# - 11,0,16,5
# roomConnections:
# - 13,5
# - 13,9
- type: dungeonRoomPack
id: MediumArea1
size: 5,17
rooms:
- 0,0,5,17
# Three 5x5 rooms
- type: dungeonRoomPack
@@ -80,6 +100,30 @@
- 0,6,5,11
- 1,12,4,17
# 3x5 then a 13x3
- type: dungeonRoomPack
id: MediumArea5
size: 5,17
rooms:
- 0,0,5,3
- 1,4,4,17
# 5x5 then a 11x3
- type: dungeonRoomPack
id: MediumArea6
size: 5,17
rooms:
- 0,0,5,5
- 1,6,4,17
# 5x5 then a 11x5
- type: dungeonRoomPack
id: MediumArea7
size: 5,17
rooms:
- 0,0,5,5
- 0,6,5,17
# Small
- type: dungeonRoomPack
id: SmallArea1