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:
2021 was another great year for ZenGM
Happy New Year!
2021 was the year of the variants. Here at ZenGM a new hockey variant escaped from our lab, and the existing basketball and football variants continued to evolve and spread throughout the population:
A bunch of new acheivements, including rebuilds
Omicron messed up your New Year's Eve plans? It's okay, you can stay home and try to win one of these new achievements:
Playoff power rankings
In Basketball GM, regular season and playoff games are a bit different. In the playoffs, the coach shortens the rotation. Stars play more, depth plays less, and everyone plays harder. This means that top-heavy teams tend to do better in the playoffs and deep teams without true superstars tend to do worse.
This presents a problem for the Power Rankings, which list ratings for every team in the league. Those ratings are regular season ratings, so they may not reflect how teams will preform in the playoffs, which can be confusing if you see teams consistently overperforming or underperforming their ratings in the playoffs and you don't know why.
Now on the Power Rankings page in version 2021.12.04.1335, there is a menu to switch between regular season and playoff ratings. Since team ratings are used in the point spread prediction formula, this means point spreads will also be more accurate in the playoffs now.
Here's an example.
New "Season Preview" page lets you quickly see the top players/teams as well as who is getting better and who is getting worse
Compared to other popular sports sim games like Football Manager and OOTP Baseball, the ZenGM games let you sim through many seasons a lot faster. I know some people like to take things slow and play very carefully. But on the other end of the spectrum, a lot of people sim through the season, sim through the playoffs (maybe game by game if your team made it, and maybe watching live sims of elimination games), only look at the draft prospects available around their pick, only look at the free agents that they can afford to sign, and only look at the roster of their own team.
One downside of playing like that is you lose perspective on what's happening in the league. When I added the news feed I was trying to address that, but if you play fast the news feed can sometimes just look like a whole mess of unimportant notifications.
So here's another try at helping people understand what's going on in their leagues: the new season preview page! This shows up at the beginning of each regular season, and you can access past ones at any time by going to League > History > Season Previews.
Here's what it looks like:
No more size limit for exporting leagues
Previously, exporting leagues only worked for small leagues. After you played a couple hundred seasons, it no longer worked unless you deleted some historical data. A similar problem existed for importing large league files, although that was probably not noticed much due to the issue with exporting.
That's why there have been no updates the past couple weeks - I have been trying to fix all these import/export issues. It's actually pretty tricky, because it requires rewriting a lot of my code and also working around missing features and bugs in various browsers. But I think I am finally happy with it, so it is now released in version 2021.10.26.0638.
As an added bonus, you can also see progress bars when importing/exporting leagues, which is nice for large leagues:
Players act differently when they're in foul trouble
There are many ways in which my video games differ from reality. One is fouling in Basketball GM. In real life, everybody knows about foul trouble. If a player gets too many fouls too early, his coach might sub him out. If he stays in the game, he's probably going to try to avoid fouling by being less aggressive on defense. Common sense stuff.
Until today, none of that was in BBGM. Players would play with the same level of aggression regardless of the foul situation, and substitution patterns had nothing to do with fouls. The end result was that foul outs were more common in BBGM than in real life. Especially really early foul outs. It's really frustrating when it's game 7 of the finals and your star decides to foul out in the 2nd quarter while your coach does nothing about it!
Well, that's not going to happen any more, because now BBGM knows about foul trouble.
I rewrote the football game simulation engine to fix weird bugs and improve penalties
One frustrating thing about Football GM, both for me and for users of the game, is all the game simluation bugs. There are fewer than there used to be. I try to track them down and fix them when people report them to me. But sometimes, that doesn't work very well.
Like I got a bug report that sometimes the ball carrier would cross the first down line, fumble, the offense recovers the fumble behind the first down line, and yet it still counted as a first down.
I investigated it, found the part of the code that was doing the wrong thing, and... I couldn't fix it. The bug was ultimately caused not by a little typo or mistake, but a fundamental problem in how game simulation worked. Specifically, the problem was that there was no sense of history. All of the "state" of the game (possession, down, distance, score, etc.) was stored just once. As the game progressed, state was updated. But what if you need to go backwards? Like the aforementioned first down line example. Or, even more troubling, penalties. With penalties, there is always the possibility that anything that happens in the game could be reversed. I had some hacky code to handle some of that, but it was limited, mostly by the fundamental problem mentioned above.