xylafur / dnd-generator

Tool to help us in our campaign
1 stars 0 forks source link

Stochastic Dungeon Populator module #14

Open TetroVolt opened 6 years ago

TetroVolt commented 6 years ago

Abstract: Module idea for dynamic enemy location permutation via stochastic dungeon population.

Explanation Suppose a campaign has a dungeon D, typically in many games the locations of unique enemies are static, ie the boss will always be in the boss room and unique enemy X is in room Y. But as some innovative procedural generated games have done, the locations of enemies are able to vary with each playthrough.

Logically this makes sense especially for living space dungeons. Suppose the dungeon is a bandit hideout populated by unique bandit types, monsters, beasts, creatures, etc. It therefore makes sense that the inhabitants move from place to place in the hideout and that the locations of each inhabitant should not be the same because of the randomness of the timing that the party encounters the location. This modules purpose would then be to select using random process a configuration of creature locations and manage probabilities of creature spawning and return to the DM a permutation of the possible configuration space.

Basic Implementation A minion spawn configuration would have to contain a list of creatures that can exist in the dungeon of length N and a list of unique NPCs capable of spawning in that area. Each location then contains a string representing the name of the location and then a list of floats of length N who's sum over the N elements adds to 1 representing the probability of the nth minion type spawning at said location. The populator can then loop over each location until one or more possible user specified conditions (until population size reaches a defined number, all unique NPCs spawned, other).

Enhancements Some enhancements to this configuration could be a population limiting parameter for each location (such as for rooms it makes sense to have a maximum occupancy limit) which could then also be creature unique such as a maximum of 4 minotaurs may spawn in this room. A more descriptive population size would contain minimum population, maximum population, and average population which would then be fed into a method which can interpolate a probability distribution to then generate the occupancy number for that location for that playthrough.

Permutative Function Aspect Since computer generated random numbers are pseudorandom and not truly random, the seed of the random number generator can be thought of as a key and the populator a function which maps a seed to a particular dungeon population using a user supplied rules.

criticisms and suggestions welcome.

ghost commented 6 years ago

I'm so sorry. Your class must be getting to you lol. Granted, this is a good description, but wow.

xylafur commented 6 years ago

@TetroVolt Sounds awesome, but I think you should start with a static dungeon and make it dynamic like this later on. Also will the output just be complete strings and floats for pos or is the end goal creating a png or jpeg image?

ghost commented 6 years ago

I totally wanna do this, but I think we may be expanding to quickly. Let's consolidate what we have, and test it, ensure it's easy to use, and get a framework decided upon. We were just changing up our die rolling this week, and there's a couple bugs that need to be worked out.

xylafur commented 6 years ago

@Acejhm I don't think that there are that many bugs, but I definitely agree that we should continue to clean up our code. Personally, as I'm making new things, I'm cleaning up existing modules to make them easier to use. So I'm kind of doing both at the same time.
Also I like how ambitious we are making this, all of these features are things we can really brag about after we get them implemented

xylafur commented 6 years ago

I think that we should make unit tests and then in the future, when we add a new feature we must also add tests for it before merging into master . We could have the git hooks run all of those unit tests too