Update DunGenExtender

Raphtalia 2024-08-20 19:23:11 +00:00
parent aa789c4510
commit 0129935afd
1 changed files with 42 additions and 10 deletions

@ -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.
<br/><br/>
# 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.
<br/><br/>
# 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.