After a break and without seeing the game every day, and then trying to do some work, I have come to a conclusion that I lack high-level tools to quickly adjust critical parts of the game. This is something I mentioned before, and I think I really need to invest more time to make my life much easier in the near future. One of the first bits are the enemies, their selection, their per-level selection and their per-level distribution. I currently have to make an enemy asset (expected) and then make an enemy collection asset, and enemy level selection asset, and link that to level definition. All of this is very finicky and along the way I totally lose sight of the “overall picture”. I have a ton of low-level assets, but very few high-level assets that would allow me to make big addition and balance changes quickly. I think, as a one-man team, I need to design my assets to allows for such top-down design.
In short, I’m doing things too smart to my own detriment.
Each of my level has its own folder with all its assets:
One of those assets is the aforementioned enemy selection:
This is a long list of enemies, when you consider I have to do this for every level and every potential mob that can be selected. I still need to extend this to have weights and such, and this is becoming daunting.
So instead, I am going to make a single asset that is shared between all levels, but which contains the relevant level information. That is, I will specify the mobs I want to select, and specify the levels where they can appear:
For my purposes, this is a min-max slider for the level range where particular mobs can appear.
Further more, I can extend this to specify exactly which ones are supposed to be regular or trash or boss mobs:
And finally, I can specify a weight or ratio of specific enemies when they need to be selected:
So this now lets me edit a single asset, where I can quickly wee all the enemies for all the levels. Balancing and adding/removing enemies is much faster this way. I do lose some of the distribution options that come with enemy collections, but I rather be able to quickly adjust the values than have immensely customization ones that I can barely understand.
One thing I am not missing is exact enemy counts. I was doing this on a per-level basis and I was about to do it this way again:
Problem is, I just did exactly what I wanted to avoid — made another per-level asset.
So let’s move this logic into the shared enemy selection too and fill out values as a table of per-level entries:
Expect, I realize, I don’t care about rooms, I care about mob designations:
And this all provides a much better high-level overview. It also makes the code a bit cleaner and asset access a bit more streamlined. I just need to ask the asset “give me trash enemies for level 3” and it generates a list. This loses some of that “number of enemies per the whole level” balancing, but I don’t think I care enough to complicate it that much.
All the above works the same for loot. In fact, my loot asset is basically identical to old enemy asset:
It’s on a per-level basis with even more items to fill in.
In fact, it needs the (chest) prop as well:
So I am also converting this to a similar table, where I can just specify things (loot item and container prop) in a list:
Specify weights/ratios and level ranges:
And specify level counts:
And the thing I keep getting wrong with my loot stuff: I need to specify per-chest item counts, since I am selecting “item chests”, but not specifying how much of something goes into that chest.
Also, I need to add ranges to have some random values instead of predictable same ones:
And now it is perfect! …well, not really, but it’s good enough for my purposes. I just need to make future changes to this easier than they are now.
Okay, see you next month! (hopefully not)