New "Season Preview" page lets you quickly see the top players/teams as well as who is getting better and who is getting worse

November 15, 2021-

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

October 26, 2021-

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.


Slam dunk contest

September 13, 2021-

Do you like text-based basketball simulation? Then you'll love the new text-based slam dunk contest in Basketball GM!

The All-Star Game has been in BBGM for a while. Now, before the All-Star Game is played, you can also simulate the slam dunk contest.

The slam dunk contest has no impact on any other part of your league. It's just a fun little mini-game. But honestly, it's pretty fun. I probably spent way too much time working on it, but the end result is that it has a ton of nice little features that I hope you enjoy!

But first, here's what it looks like:


Basketball GM now supports the play-in tournament

September 1, 2021-

Version 2021.09.01.0705 of Basketball GM finally supports the play-in tournament. The play-in tournament is the weird pre-playoffs thing the NBA recently added, where the last two seeds in each conference are determined by a tournament involving the 7th through 10th best teams in the conference. First, the 7/8 and 9/10 teams play. The winner of the 7/8 game becomes the 7 seed in the real playoffs. Then the loser of the 7/8 game plays the winner of the 9/10 game for the final playoff spot.

It works the same way in BBGM, just generalized to all league types. So if you have only 4 teams per conference making the playoffs, then the play-in tournament will be between the 3-6 seeds. And if you set the playoffs to not be determined by conference, there will just be one play-in bracket to determine the bottom 2 overall playoff teams.

What does it look like in the game?


New playoff settings: "Split By Conference", "# Guaranteed Per Division", and "Reseed Rounds"

August 14, 2021-

I just added three new playoff settings in version 2021.08.14.1172. The first two in this screenshot have been there for a while, but the last three are new.

How exactly do they work?


No more hard cutoff in three point shooting tendency

August 11, 2021-

You may have noticed a funny thing about the number of three pointers that certain players take. There was a hard cutoff at about 35 in the 3 point rating. Slightly above that cutoff and players would take a few three pointers per game. Slightly below and players would take none. This has never made any sense.

It was particularly annoying for players barely above the cutoff, since they are bad three point shooters, so you don't actually want them taking a bunch of threes. That puts you in a situation where you may be hoping a player's three point rating does not improve, so they can stay below the cutoff rather than chucking up a bunch of inefficient shots.

Now, finally, that hard cutoff is gone. The number of three point shots is now continuous. Players with ratings from 35-45 will shoot fewer three pointers (most noticeable towards the lower end of that range), and players with ratings below 35 will shoot more. Not a lot, but more than the 0 they shot previously.

Some people may think a better solution would be a more fundamental change in how shot selection works, and they might be right. The advantage of what I did here is that it's a quick little fix that mostly leaves the game alone, except to address this one annoying issue.

Improved identification of rookie contracts in real players leagues

The new player mood system introduced last year is working pretty well overall, but there are some small issues with it. One is related to a mood bonus given to players on rookie contracts, where it says "Eager to sign first non-rookie contract" and gives a big +8 bonus. This gives BBGM something like the NBA's restricted free agency, because it results in your drafted players being less likely to refuse to re-sign. (For FBGM and ZGMH, it only applies if you diasble the hard cap setting.)

Some people have noticed that the bonus was not correctly applied for some real players in historical leagues. Why? Because it was kind of hacky code. It identified "rookie contract" by comparing a player's draft year, the expiration year of their contract, and the length of a default rookie contract for their draft round.

This works fine for random players, since their rookie contracts all are generated by the game and all follow that same formula for length. But it's a bit tricky for real players leagues, or for custom league files, because they may have different length rookie contracts.

Today I have changed how rookie contracts are stored in the game. There is now an explicit rookie flag in the contract, so a player contract looks like this internally if it is a rookie contract:


Randomize built-in teams when starting a new random players league

There are now 50 different built-in teams. But when starting a new random players league, you always get the same 30, unless you manually select some other teams.

Now in version 2021.07.11.0740, there is an easy way to randomize the teams in your league, and it's pretty cool how it works. Thank you nicidob for the idea!

Access it by clicking "Customize" next to the list of teams when creating a new random players league: