-
Notifications
You must be signed in to change notification settings - Fork 153
Options to configure min/max age of draft prospects and force retire players at certain age #354
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Ages of draft prospects is a good idea, if you can make the ratings behave reasonably (like I see you talking about on Discord). Force retire age... what's the use case? To simulate college sports? If that's it, then there are so many other differences with college sports, I'm not sure it's worth adding. It would still be unsatisfying. |
I've been playing with a league with it set to 25 where there's constantly new generations of players. It's really interesting honestly, the dynamic of having to play around the fact that my star player won't be around for much longer, drafting the youngest players are key. Fun things to do with it. Simulating a college league is partly possible which is neat, but it can go deeper. Simulate a freakin middle school league. U11 leagues. Possibilities are endless with what people can do with that option |
This can be said with any other leagues that aren't NBA, like Europe leagues, FIBA. Yet, people still create those leagues for BBGM with teams and league structure despite not being able to fully recreate what those leagues offer. |
U11 rec league with 8 draft rounds and prospects aged 9-10 is actually pretty fun |
Okay, that convinces me enough. About players in new leagues, the way it works is it simulates 20 past drafts to generate all the players https://github.com/dumbmatter/gm-games/blob/d3554459319bf558c44ff3bf092df30da06dc740/src/worker/core/league/create.ts#L471 In your use case, I guess you wouldn't need 20 past drafts. But you'd need more rounds per draft to compensate... might need better error handling in that case, to automatically increase that value, or people will find it annoying. |
That last commit needs some work to make it less repetitive. I tried to declare an array of ratings then looping to subtract but I get an error.
When running lint, I get |
ageDraft command is complete and works pretty well with scaling |
When you write something like Easiest fix is to change it the array declaration to |
Also can you give me write access to this branch (or your whole repo)? I haven't actually done anything, but I want to look at this soon, and might be easier if I can push a commit to the PR branch. |
// If the youngest players generated aren't 19, scale ratings to match age | ||
const age = g.get("draftAge")[0]; | ||
if (age !== 19) { | ||
// Youngest prospects != 19 will be scaled, scaling stops at age 14 and 28 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you take another look at all these?
- Basketball is currently scaled from 12 to 28, not 14 to 28
- Football is currently scaled from 14 to 30, not 14 to 28
- Hockey is currently scaled just like basketball, but I'm not sure if that's intended because in the other two sports you use the same age in the
scale
formula as in theif
right before it. If it's intended for those two numbers to always be the same, use a constant likeconst DEFAULT_MIN_AGE = 19;
(different in each file). That prevents them from ever getting out of sync.
If the goal was to have all the age ranges the same for every sport, like the comments suggest, I recommend you put the helpers.bound
around age
, not around the entire scale
formula. Then it'll be much more clear what's going on.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
good eye, give me a minute
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok so some reasoning behind these numbers if you aren't sure. I set the min max age scaling limits to prevent super leagues (So not every prospect is a 90 OVR demigod for 35 year old DP's) and to prevent trash prospects with a rating of 0 in every single rating. So hitting the max scaling will produce a class that looks like a typical league (few studs, lot of role players), and the min scaling will at least give some promising players instead of everyone being absolute trash.
@@ -198,6 +198,37 @@ const genRatings = ( | |||
pots: { ...defaultOvrsOrPots }, | |||
}; | |||
|
|||
// Youngest prospects !== 18 will be scaled, scaling stops at age 13 and 26 | |||
let age = g.get("draftAges")[0]; | |||
age = helpers.bound(age, 13, 26); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why different than other sports?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When I left it the same as BBGM/FBGM, there were an absurd absurd number of superstars. Players below the min scaling were also a bit too good.
"diq", | ||
] as const; | ||
// These ratings develop slowly compared to others, so they scale less. Works well in testing | ||
const rtgsDevelopSlow = ["spd", "jmp", "drb", "pss", "reb"]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't fix it, I'm doing it, but... these are never getting applied!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bruh
@@ -357,6 +357,43 @@ const genRatings = ( | |||
pots: { ...defaultOvrsOrPots }, | |||
}; | |||
|
|||
// Youngest prospects !== 21 will be scaled, scaling stops at age 14 and 30 | |||
let age = g.get("draftAges")[0]; | |||
age = helpers.bound(age, 14, 30); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I understand why you want an upper bound (because at some age, players stop development, so continuing to boost them after that would make super players).
But why do you want a lower bound? No matter how low a player's age, he's still going to be improving every year.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it is subjective, but ages under 10 have a lot of 0 ovr players, so it's not rly fun if you want to do some little kid league and have to deal with most of the players being incompetent (maybe realistic). Bigger thing, if everyone becomes 0 OVR, everyone will end up developing in very similar styles and only be separated by height rating.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you could lower it or remove it if you believe its better, i just didn't really like it without a min limit
…ly check the distribution of ovr for various draftAges
Did a little refactoring (moving the age adjustment code to one place for all sports), lmk if it looks okay. Also made the lower bound of the adjustment unbounded, but still small enough at 0 that you get some diversity of players. Also did this fun thing, for displaying the 1st quartile, median, and 3rd quartile ovr ratings at different draftAges values:
Maybe football needs a more severe penalty for young players... |
looks good 👍 |
I'm assuming you didn't mean to leave default at [0, 0], but if you did then myb |
…a new league. Previously, if draftAge was [0,0] the oldest player was 20
I made one more commit f1b5530 which tweaks the aging parameter for FBGM and also improves the age distribution in new leagues. It's definitely not perfect, some settings do weird things, the parameters could still be tuned better. But I think it's good enough to release now. I'll just wait for you to give the final approval, boss! |
Draft ages can really mess up the talent of a league if they aren't close to the default. Prospects below the default min age (19) seems to be just as good as default, which absolutely balloons the talent. IMO would be better if somehow they would be generated with worse ratings.- touched up in499c58b
Something I want to do about force retire but not sure how, when importing a league file with it set to a number (lets say 32), I want to make sure the league does NOT generate players older than 32. Right now it does which is awkward.
Just like any other extreme god mode option (death rate, gamesim settings), people can make their leagues wonky, but nothing wrong with that.
Other than all that, fun, cool, highly requested feature! Allows to copy some international leagues that allow 16 year olds, or the WNBA which only allows seniors.