on3iro / aeons-end-randomizer

🧙🏻‍♀️Awesome Companion App for Aeons End: https://aeons-end-randomizer.de 🧙🏽‍♂️
MIT License
43 stars 24 forks source link

Weighted Randomizer for Basic Nemesis Cards #230

Closed DawncallerDE closed 4 years ago

DawncallerDE commented 4 years ago

Is your feature request related to a problem? Please describe. When mixing different sets of Aeon's End together, basic nemesis cards tend to destroy the encounter balance. Each set has a certain number of cards that deal damage to gravehold, for example. For a single set, even when you get all of those cards in your random selection, the boss is still doable. When mixing together the basic nemesis cards of multiple sets, which each in turn have their own number of gravehold life loss effects, you can create a very unbalanced nemesis deck that overly attacks one game termination resource. (Same with the number of minions, player life or direct attacks)

Also see: https://boardgamegeek.com/thread/1925753/mixing-nemesis-cards-base-set-and-war-eternal https://boardgamegeek.com/thread/2255907/effects-mixing-nemesis-basic-card-sets https://boardgamegeek.com/thread/1942179/nemesis-basic-cards-setup-all-content https://www.reddit.com/r/boardgames/comments/cpexdt/combining_all_the_aeons_end_sets/

Describe the solution you'd like A weighted basic nemesis randomizer that balances the number of minions, attacks and powers and also balances the number of gravehold/player/... interactions, so that you can have a quick way to use all of the nemesis content together.

Describe alternatives you've considered

Additional context Adding the basic nemesis cards as data and tagging them in some way to indicate what type of damage / type the card represents and having some options to configure the thresholds of this nemesis randomizer would really enrich setup for all players with more than one Aeon's End set.

on3iro commented 4 years ago

@DawncallerDE Thanks a lot for the suggestion. I have also thought about this and even discussed this with another user somewhere (I don't remember).

This is definitely a feature I would like to implement in the future. The one thing that is a bit offputting right now, is that this would mean we would have to type in all the available data, which is quite a huge effort.

Would you be interested in contributing and providing the necessary data? I could create a file with an example of how it should look and you could then just add all the other cards? That way I could focus on the task at hand and do the actual coding :)

DawncallerDE commented 4 years ago

@on3iro Cool, thank you for that quick answer! I can definitly help set this up and I'd like to be a part of this.

I have not yet found an online gallery or spreadsheet with all the necessary nemesis card data, so I'd be reliant on having the actual physical thing available. I am currently playing through TNA, with Legacy soon after. (It's a weird order, I know)

Once those envelopes are open, I can work on getting these into a JSON representation according to your example. When the current kickstarter fulfills (which will be a while), I will have access to the rest of the data and will be able to work that in.

Upgraded Nemesis cards are also a thing and will probably be continued in Outcasts, so it's probably a good idea to keep these in mind.

I can also try and ask the designers on the discord directly if they know of or would provide a spreadsheet of existing cards, as this would speed things up immensly. I only found this spreadsheet for original Aeon's End so far: https://docs.google.com/spreadsheets/d/1aayOKz0NO0ykDn3AmqKH7j-IDLnlxZGDsZPmg6jdhhw/edit#gid=1519288338

on3iro commented 4 years ago

@DawncallerDE awesome!

Spreadsheets for all the content waves would be great. As you mentioned it might be a good idea to ask Kevin on discord if he could provide these. Having a spread sheet for wave one is a good start, though. It is absolutely enough for me to start coding.

Do you have experience with git + github? This would make it a bit easier to incorporate your contributions. But don't worry if you don't, we will make it work either way ;)

Oh and don't feel the need to rush playing through the game, just to reveal all the cards. If we get our hands on spreadsheets for the waves, you might not even need to type the cards in yourself. For now we also do not need the cards effects. It would be enough to have their related expansion, type (attack, power, minion) and nemesis tier. If we want to build an interactive nemesis deck comparable to our turn order feature in the future, we can still add the effect texts.

DawncallerDE commented 4 years ago

@on3iro Good news! Will (wpflug13 on bgg) provided me with these links when I asked on discord: https://docs.google.com/spreadsheets/d/1BMWkNihau2-PNNbQBgPoRvH_rraQH344rd49ooUFYTg/edit#gid=0 https://docs.google.com/spreadsheets/d/e/2PACX-1vRb8-VJ0o4-WHwHa7rswUI7TH8ZB_rlTt1hyQd1zwFI-6eyGHacwR7YalMXn2sW6ry8mqRMgkNnQmNr/pubhtml?gid=0&single=true

He also created the useful breakdowns in these topics: https://boardgamegeek.com/thread/2255907/effects-mixing-nemesis-basic-card-sets/page/2 https://boardgamegeek.com/thread/2283463/additional-upgraded-basic-cards-mild-legacy-spoile

There is another update coming up that includes the rest from legacy, which I can get access to via discord direc message. I'll see to that once I find some time. I did not yet look through the lists in detail but it seems to have everything that is needed.

I'd then copy-paste and reformat (if neccessary) into the json structure you provide, because that would be the fastest way for me. (There's probably a nice way to extract and reformat via some googledocs API but I've not done that before and the amount of cards is manageable so I'll probably do it the oldfashioned way)

TBH I never really used git/github before. I am a Software QA Manager in my day job and do a bit of unity coding on the side with a few of my friends, but for all these things I just use SVN. I am interested in trying that out though, so once I'm done getting that stuff together, I'll either look into that or send the files to you in some other way.

I estimate I will have time to work on this starting sometime at the end of next week.

on3iro commented 4 years ago

Awesome :) I hope that I will find some spare time during the upcoming weekend to look into this - so I''ll probably be able to provide you the necessary format next week.

Regarding the usage of git + github: It would be great if you could fork this repository (more specifically the dev-branch), write into the json-files, commit with git and send us a Pull Request via github. If you have trouble with any of the steps above, we can pair up via discord or jitsi (or basically any other tool with screensharing) and I can navigate you through the process. That way It should be rather easy for you to learn all the necessary basics :)

on3iro commented 4 years ago

Ok - so I did not have the time to really get started, yet. But I had a quick look at the files Will provided. They look amazing.

I will probably write a small script to convert these to the json we need. That way you @DawncallerDE won't have to type in anything :)

The one problem that remains to be solved, is the actual algorithm to balance the deck. I am going to read up on all the links you provided.

Maybe we could start with an easy implementation which just takes the distribution of card types (attacks/powers/minions) into account. Balancing by damage distribution etc. would then be another step and an additional feature. We could add a UI switch to toggle between these two modes.

on3iro commented 4 years ago

One thing I just notized: Have there never been basic nemesis cards in small box expansions before? Wills spreadshets seem to just contain big box releases - but maybe this is because no new cards have been released inside small boxes!?

DawncallerDE commented 4 years ago

Sounds great! :-)

Regarding the advanced algorithm, the easiest way without any major bias would probably be: Input:

Then: Select a card type (Att/Pow/Min) at random that still has slots left to randomize Select a card tag-pool (GH/Player/Misc) at random that still has slots left to randomize If the pool of cards selected this way is not empty and the card is not already in the set of slotted cards, select the card and reduce the count of the chosen card type slot and tag-pool slot by 1. * Repeat

*If this pool is empty, there could be a fallback or it just tries again for a fixed number of times. Should only be a problem when the config of used sets is really small and I don't think people use the randomizer in that case.

That way, the default values could be based on some kind of "recommended practice" and otherwise everyone can customize their own variant.

I found a recommendation regarding nemesis setup from Kevin. "1 or 2 minions max per each tier is the easiest thing to do to create more balance. Too many or too few minions tends to mess up the pacing more than anything else and is one of the easiest things you can do before setup. There's more complicated things you can do like balancing player/gh damage but to many people the increased sorting and setup time needed to build a deck that way wouldn't be worth the increase in consistency across your games."

found in https://boardgamegeek.com/thread/1806714/combining-base-set-and-war-eternal-basic-nemesis-p

Regarding the basic nemesis cards in small sets: I don't think so, but I am not sure. It seems that in Outcasts, we will get upgraded basic nemesis cards in the small expansion "The Southern Village" at least, but a recent discussion in discord led me to believe that this is a first.

DawncallerDE commented 4 years ago

The above also does not yet account for upgraded basic abilities, so that needs to be factored in somehow via an input parameter. Maybe those upgraded abilities should be determined first and can be handled the same way but only select from the "upgraded" category. After that, things can continue as normal.

on3iro commented 4 years ago

Alright, thanks for all the input :).

I would prefer to build a basic version of the feature and expand on it after release. Therefore I will probably not take upgraded basic nemesis cards into account, yet. 🤔

Do I understand you correctly, that our "basic" algorithm would basically be, what Kevin said in this thread? Meaning we simply divide all cards by tier, take 1 to 2 minions of each tier and randomize everything else? Would that be enough for a start to make it useful to you?

DawncallerDE commented 4 years ago

Yeah, that would definitly be useful! :)

on3iro commented 4 years ago

Update from Will: https://docs.google.com/spreadsheets/d/13rYRqUClqlfXniYtfNWDj6YcpJjfIMHeuTnO_Kxxa6o/edit#gid=0

on3iro commented 4 years ago

@jannydiamond just as a reminder: https://github.com/on3iro/aeons-end-randomizer/pull/240#pullrequestreview-359392191