From 0129935afdbc80b1bc9db2c142117a08930bfb42 Mon Sep 17 00:00:00 2001 From: Raphtalia Date: Tue, 20 Aug 2024 19:23:11 +0000 Subject: [PATCH] Update DunGenExtender --- DunGenExtender.md | 52 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/DunGenExtender.md b/DunGenExtender.md index cd5d1f6..d750282 100644 --- a/DunGenExtender.md +++ b/DunGenExtender.md @@ -1,8 +1,14 @@ +# Important Features + ## Dungeon Flow -The `DungeonFlow` that the `DunGenExtender` asset will influence. Each `DungeonFlow` can only one `DunGenExtender`. +The `DungeonFlow` that the `DunGenExtender` asset will influence. Each `DungeonFlow` can have only one `DunGenExtender`. ## Main Path -`MainPathCount` is the amount of main paths that the dungeon try to generate. If set to 1, then the dungeon generation will default to the vanilla behaviour of, well, generating only one main path and its branching paths. If set to 3, then the dungeon generation will try to create two additional main paths from the first `MainRoomTilePrefab` tile in the base main path. It will then create the branching paths for each main path. +`MainPathCount` is the amount of main paths that the dungeon try to generate. If set to 1, then the dungeon generation will default to the vanilla behaviour of, well, generating only one main path and its branching paths. If set to 2, then the dungeon generation will try to create one additional main path from the first `MainRoomTilePrefab` tile in the base main path. It will then create the branching paths for each main path. + +| Static | Gif | +|---|---| +| ![](https://i.imgur.com/zX55C7A.png) | ![](https://i.imgur.com/5oZKlqq.gif) | If the generation fails to fully create any of the main paths for any reason, it will reset the entire dungeon generation and try again. The length of these additional main paths is the same as the base main path, and its starting node for length calculation purposes is at the base main path's starting node. @@ -18,9 +24,23 @@ The `DungeonFlow's` node list is replicated onto the alternate main paths. The s The starting index is the first node whose position is greater than the `MainRoomTilePrefab` generated position on the main path. +![](https://i.imgur.com/uG7RgWs.png) + ### Copy From Node List -The starting index is the first node whose tilesets contain `MainRoomTilePrefab` plus 1. Due to this, the node section MUST contain some node whose tileset contains `MainRoomTilePrefab`. +The starting index is the first node whose tilesets contain `MainRoomTilePrefab` plus 1. Due to this, the node section **MUST** contain some node whose tileset contains `MainRoomTilePrefab`. + +![](https://i.imgur.com/gq6PQm6.png) + +## Archetypes on Normal Nodes +Enable this feature by toggling `AddArchetypesToNormalNodes`. This allows normal nodes in `DungeonFlow` to create branching paths by attaching an archetype to it. + +Each element of the `NormalNodeArchetypes` list represents which node receives an archetype. The `Label` describes which normal node of the same `Label` will receive one of the archetypes in the `Archetypes` list. If the `Label` is empty or white-spaced, then it becomes the default target for any normal node who did not have a corresponding `Label` in the `NormalNodeArchetypes` list. If a normal node does not have any corresponding target, then it's spawned tile will not create branching paths like normal. + +> **NOTE:** Start and End nodes cannot receive archetypes. + +

+# Nice to Have Features ## Dungeon Bounds Enable this feature by toggling `UseDungeonBounds`. This adds a bounds to your interior where the dungeon generation cannot place tiles outside of. This can help preventing the dungeon from creating paths all the way to Narnia. @@ -44,12 +64,27 @@ Bounds GetDungeonBounds(float dungeonScale) { } ``` -## Archetypes on Normal Nodes -Enable this feature by toggling `AddArchetypesToNormalNodes`. This allows normal nodes in `DungeonFlow` to create branching paths by attaching an archetype to it. +## Forced Tiles +Enable this feature by toggling `UseForcedTiles`. This attempts to generate additional branch tiles after the main and branch paths are generated. Each element in the `ForcedTileSets` list will attempt to generate one tile from its `Tilesets`. Where the tile will generate can be influenced with `MainPathWeight`, `BranchPathWeight`, and `DepthWeightScale`, the same as DunGen's `Tileset`. -Each element of the `NormalNodeArchetypes` list represents which node receives an archetype. The `Label` describes which normal node of the same `Label` will receive one of the archetypes in the `Archetypes` list. If the `Label` is empty or white-spaced, then it becomes the default target for any normal node who did not have a corresponding `Label` in the `NormalNodeArchetypes` list. If a normal node does not have any corresponding target, then it's spawned tile will not create branching paths like normal. +The dungeon generation will attempt to generate the tile on every main and branch tile (excluding tiles generated from the Forced Tiles feature). This feature does not guarantee that that tile will generate. If the tile cannot generate for whatever reason, it will simply proceed as normal. -> **NOTE:** Start and End nodes cannot receive archetypes. +> **NOTE**: Due to current limitations, this feature only works if `MainPathCount` is above 1. + +## Branch Loop Boost +Enable this feature by toggling `UseBranchLoopBoost`. This causes the dungeon generation to prioritize branch tiles that connect to already generated tiles. This increases the chance of circular/looping paths generating. This feature slows dungeon generation a bit, though it only happens after the main paths are generated (where most of the dungeon generation time is spent). + +When the dungeon generation is considering which branch tile to place down, it will first consider a maximum amount of `BranchLoopBoostTileSearch` tiles. For each tile considered, its weight will be multiplied by `1 + `x` * n` where `x` is `BranchLoopBoostTileScale` and `n` is the number of additional doorway connections if that tile was selected and generated. + +> **NOTE**: By itself, this feature only encourages the dungeon generation to generate circular/looping paths. If your interior does not create looping paths naturally by sheer chance, this feature will have very little to no effect. + +## Max Shadows Request +Enable this feature by toggling `UseMaxShadowsRequestUpdate`. This prevents the `Max shadow requests count reached` warning spam that can appear if the interior has too many lights in close proximity. `MaxShadowsRequestAmount` will become the new amount of shadow requests. + +> **NOTE**: By default, Lethal Company uses 4 shadow requests. I find from my experience that 8 shadow requests is more than enough to stop the warning spam. + +

+# Niche Features ## Doorway Sisters Enable this feature by toggling `UseDoorwaySisters`. This feature requires the usage of the `DoorwaySisters` component to do anything. This prevents an intersecting doorway from generating into an actual doorway IF it's sister doorway has already generated AND both of these doorways lead to the intersecting, neighbor tile. See here for that [component's details](https://git.touhou.dev/Raphtalia/DungeonGenerationPlus_LethalCompany_Mod/wiki/Components#user-content-doorway-sisters). @@ -71,7 +106,4 @@ This feature modifies the list of archetypes in `LineRandomizerArchetypes` to re > **NOTE**: This feature is probably not necessary for your interior. My interior was reaching up to 2000 potential doorway pairs for each tile injection and needed a way to reduce it. And even with this fix, the doorway pairs bubble sort rewrite was probably the bigger performance boost anyway. Still, I needed a way to future-proof my dungeon generation times and such this feature still exists. -## Max Shadows Request -Enable this feature by toggling `UseMaxShadowsRequestUpdate`. This prevents the `Max shadow requests count reached` warning spam that can appear if the interior has too many lights in close proximity. `MaxShadowsRequestAmount` will become the new amount of shadow requests. -> **NOTE**: By default, Lethal Company uses 4 shadow requests. I find from my experience that 8 shadow requests is more than enough to stop the warning spam.