New team: the Albuquerque Thunderbirds
There's a new team in the ZenGM universe, the Albuquerque Thunderbirds!
Create leagues from a mix of teams - random teams, real current/historical teams, and teams from your existing leagues
Recently I added an exhibition game feature that lets you play a game between two teams from any season in any of your leagues. In BBGM you can also pick any real teams, current or historical. This was a pretty exciting feature because it was the first time there was any type of cross-league play. But you can imagine a lot of other things involving multiple leagues that might be fun.
So here's another one: when creating a new random/custom league, you can now include and current/historical teams from any of your leagues, including real teams in BBGM! Try it out by clicking the "Customize" button next to the team selector when creating a new random or custom league.
New team: the Oakland Blue Oaks
There's a new team in the ZenGM universe, the Oakland Blue Oaks!
Bug fix for trading picks during the draft
This isn't that important of a bug fix, and I bet most people won't notice either way. But it does need a bit of explanation to make sense, so here is a blog post!
All sports have an All-Star Game, and more All-Star settings
The All-Star Game has been in Basketball GM for a few years now, but I never got around to putting it in the other sports. Well, now I have. Plus some new All-Star settings for BBGM too.
The biggest difference between basketball and the other sports is that positions matter a lot less in basketball. You can throw 5 guys out there and it might not be ideal, but they can play. For other sports, the All-Star Game needs to be pretty rigid by position for it to feel credible. And that's how it works, you'll see the best players at each position selected as All-Stars in other sports.
There's some new customization features too, available in the new "All-Star" section of the League Settings page:
The Universal Draft Lottery Simulator
Earlier today I released an update allowing the draft lottery to be customized, rather than only having a handful of preset options. You can set the number of picks to determine in the lottery, and set the odds for each team.
Previously, my draft lottery odds calculation code didn't support this kind of thing. Originally it was 3 hardcoded nested loops to handle the 3 picks in the NBA draft lottery. Then when the NBA added a 4th lottery pick, I added another conditional nested loop. At this point it was starting to get pretty ugly. Now the MLB has a 6 team lottery? I'm not doing 6 nested loops. I decided to rewrite it to support any number of picks. That made it easy to support the new custom lottery settings.
While doing that, I figured this might be a fun thing to play with on its own. So I took my lottery code and put it in a little self-contained website called the Universal Draft Lottery Simulator. Kind of silly, I know. But I bet someone will have some fun with it!
Also, it's open source.
Investigating a tricky performance bug
Some people reported performance issues in my games recently. After debugging I found that there is indeed a serious performance bug in some situations. For example, viewing the standings page and auto playing a season took 3x as long as it did a couple weeks ago. That's pretty bad!
After looking in my past commits to identify exactly when the slowdown started, I found it happened when I upgraded @rollup/plugin-commonjs from version 21 to 22. That's a package used in compiling JS for production. Annoyingly, it's only used in production mode and not in dev mode, which makes it harder for me to notice a bug like this. But for this package to cause a slowdown is strange... it feels more like something that should either work fine or completely break, not cause a performance issue. So while I could stop here, switch back to the old version, and call it a day... let's go further.
ZenGM Baseball
When I was a kid, I was obsessed with baseball. My dad says this dates back to watching the Mets win the 1986 World Series when I was a baby, but I don't remember that. I do remember my favorite childhood book. This was back before normal people had the Internet, and sites like baseball-reference didn't exist yet. But I had this giant book of baseball stats going back to the beginning of professional baseball. Just page after page of tables - standings, stats, playoff results, awards, etc. I would sit there reading those tables of stats without ever getting bored.
Baseball simulation games are the type of thing that a kid like me would get obsessed with. Except, they didn't exist yet. Well, they did exist even before computers as tabletop games, but I didn't know about them. The first real baseball simulation game that I heard of was Baseball Mogul back in the late 90s. It's still being updated today, you should check it out. I've talked about Baseball Mogul before as a big inspiration for Basketball GM, since as a got older I grew to like basketball more than baseball and I wanted a similar game for basketball.
And yet, baseball still exists, and there's still nothing quite like watching a good baseball game. After making football and hockey versions of Basketball GM, it's only natural to use that infrastructure for my first love, the only remaining major American sport.
So here it is: ZenGM Baseball
I've been working on this the past few months, which is why updates to the other games have been slow. Expect those updates to return to their normal pace soon.
ZenGM Baseball is definitely not perfect. But I did get a lot of help beta testing it from users on Discord, so hopefully it's at least somewhat good. As always, feedback is welcome.
New "command palette" allows easy keyboard navigation of your league
Inspired by a really cool feature for GitHub, I just added a command palette to my games. Open it by pressing ctrl+k on a PC or cmd+k on a Mac. The command palette lets you efficiently navigate within your league while only using your keyboard. Here's what it looks like:
New settings allow you to disable the salary cap and have more control over rookie contracts
Previously you could choose between a soft cap and a hard cap. Now you have an additional options: no salary cap.
Previously rookie contracts were based on whether you used a soft or hard cap. For a soft cap, there was a predefined rookie scale. For a hard cap, there was no predefined salary, drafted players got signed like any other players (except in ZenGM Hockey where there was a predefined rookie scale here too). Now you get some options to control this. You can set if you want a predefined rookie salary scale or not, and you get some control over what exactly that scale is.
That's the big picture summary. More details follow. First, about the salary cap: