Basketball GM is a single-player basketball management simulation game. Set your roster, make trades, draft prospects, manage your finances, and try to build a dynasty. Play it in your browser now, completely 100% free!
Minor new feature in version 2018.04.08.66: you can now set the stadium capacity for each team. To do this, enable God Mode (Tools menu) and then go to Tools > Edit Team Info.
This will probably do weird things to team finances if you change it. You probably shouldn’t edit it unless you’re making a custom league file.
For people making custom league files, see the teams customization documentation for more info.
A lot of things have changed! If you want all the details, read the blog post announcing the beta. But the main points are:
Thank you to everyone who helped beta test these changes. You helped me improve it a lot from the initial beta. However, I know it's not perfect now. Why not? Because it's hard! Even if someone correctly notices an issue, it's difficult to fix it because everything is interconnected. Fix X, break Y and Z. So it's not perfect now, but it's pretty good I think. As always, please let me know if you disagree!
Today I released a new beta of Basketball GM featuring big changes to player ratings.
There were a lot of things wrong with player ratings previously. For example, the career arcs of ratings were very unrealistic. For example, it was not uncommon for a player to enter the league with no jump shot and grow to become one of the all time great shooters, or for a player to enter the league with horrible athleticism but grow to become an elite athlete. Sure improvement is possible - but not that much! I mostly implemented the changes described here to make individual rating changes more realistic.
Basketball GM has long had awards every season - MVP, Rookie of the Year, etc. But Most Improved Player (MIP) has been missing for a while. That's because MIP is harder to compute than other awards. You don't need just this year's stats, you need prior years too. And you also need to understand context - is a player actually improving, or just recovered from an injury? Or maybe he's an established star coming off a bad season? Or maybe his numbers went up, but only because he got more playing time without really improving? It's complicated.
Earlier this week I added a bunch of advanced stats to Basketball GM. Well, now there's even more.
Team Advanced Stats: Go to Team Stats and switch from Team to Advanced to view stats like Pythagorean wins and losses and offensive and defensive ratings. Basketball-Reference.com has a good glossary of terms if you don't know what some of the stats are.
Player Win Shares and Ratings: Player pages and the Player Stats page now show offensive and defensive ratings along with offensive win shares, defensive win shares, win shares, and win shares per 48 minutes.
Offensive rating is a metric of offensive performance, although you should probably also look at usage rate when evaluating it, otherwise you might think a low usage player like DeAndre Jordan is an offensive star. Defensive rating is a metric of defensive performance, although it has trouble assigning credit to individual players so it is inaccurate for good defenders on bad defensive teams and bad defenders on good defensive teams.
Win shares (WS) is a holistic stat that aims to condense a player's performance into one number, similar to PER. OWS is the offensive part, DWS is the defensive part, and WS/48 is win shares scaled per 48 minutes played, and a WS/48 of 0.100 is average.
However it is generally better than PER because PER is really stupid in some scenarios, such as high volume inefficient scorers. Check out this guy:
He's an inefficient volume scorer. PER thinks he's a star, but WS thinks he's just a little above average. WS seems more correct to me.
This presents an interesting opportunity for Basketball GM players! AI logic is heavily based on PER, but WS is often better than PER. Until I improve the AI, you can easily get a leg up by looking at players who are rated differently by PER and WS.
WS is not perfect though. The main problem is the same thing I mentioned about defensive rating: it will underrate good defenders on bad defensive teams, and it will overrate bad defenders on good defensive teams. So be careful or you might wind up signing the next Enes Kanter to a max contract!
I rolled out a few new features over the past week, all aimed at one goal: more stats. Ideally, Basketball GM should provide you with all the advanced stats available for real basketball leagues. It's not there yet, but it's closer. Here's what's new:
Team Opponent Stats: On the Team Stats page, you can now switch between team stats, opponent stats, and advanced stats. For seasons played before this update, the only opponent stats will be blocks and points, since those have both been recorded for a long time. Then in new seasons you play, you will get all opponent stats.
Team Playoff Stats: Team playoff stats were always recorded, but there was no easy way to view them. Now you can toggle between Playoffs and Regular Season from the Team Stats page, just like you've always been able to do for Player Stats. It's crazy this feature was missing for so long!
Player Advanced Stats: This is the real juicy part, more advanced stats! When I put PER in the game, I never intended for it to be the only advanced stat. I always wanted more, but performance was kind of shitty in general and I didn't want to add more stuff to slow it down. But now, with the glorious success of Project Iverson, I can add new features without too much concern for performance (don't worry, I benchmarked it and all these additional stats have very little performance impact).
Player advanced stats now sit in their own table, which you can view on player pages for individual players, or on the Player Stats page by switching "Per Game" to "Advanced". In addition to the old standbys, I added TS%, 3PAr, FTr, ORB%, DRB%, TRB%, AST%, STL%, BLK%, TOV%, and USG%. See Basketball-Reference.com for definitions, cause that's where I got them from. Most of these won't be available for past seasons because they are based on the team opponent stats described above, but some will be.
All the % stats (like ORB%) are calculated using the formulas at the page linked above, which means they are estimates. I could have stored data directly from game simulation to calculate real values, but I didn't do that. No real reason why. Arguments could be made either way, but at the end of the day I doubt it matters much.
Hopefully this is just the start of more advanced stats. I'd love to add a better holistic stat than PER, which is really not a good metric. What do you want to see next? Let me know on Reddit.
September 9, 2017 - New Feature
One of the cool things about Basketball GM is the time scale. The NBA has been around for 70 years, and in those 70 years all kinds of crazy things have happened - freakish players, lucky shots, huge upsets, tragic deaths, and more. In Basketball GM, you can easily play 700 years - you should get 10x as much craziness as the NBA! And you do get some.
But one thing that is missing is extremely freakish players. The best players alway feel kind of the same. That's because of the 0-100 rating system - once somebody is near 100 in most categories, he's the same as somebody else who is near 100 in most categories. You could imagine fixing that by abolishing the 0-100 system and letting ratings increase unbounded, but that is a bit too radical for my tastes. A more conservative solution is to decrease the range of normal. Take a 100 rating and make it a 75, then allow anything above 75 to appear only very rarely. That would allow for more unique stars that you might only see after playing thousands of seasons.
Don't get too excited. I haven't completely done this yet. But thanks to some help from Timothy Highley, it's done for height. Short players will no longer have height 0 unless they are really short, and tall players will no longer have height 100 unless they are approaching physiological limits.
This is an important change for people making custom rosters or running multiplayer leagues. When loading a league file in the new version, player height ratings will be adjusted to reflect the new scale. If you don't want this to happen (such as, if you're building a new roster file and want to specify the heights on the new scale yourself), add this to the root of your JSON object:
In the future, if there are more backwards incompatibly changes in file format, the version parameter will be used similarly in upgrades. For now, it only affects heights.
If you have any feedback, please leave a comment on Reddit.
You can now view the draft lottery live, as it happens! The lottery behaves the same as it always has, just like the NBA draft lottery, so this doesn't change gameplay at all. But it can be very dramatic to watch the lottery unfold before your eyes.
Basketball GM 4.0 was released a week ago. It made game simulation about 10x faster. After releasing it, I was very curious how players would respond. If they played the same amount of time, they could simulate 10 times more seasons. Or they could play 1/10 of the time, but simulate the same amount of seasons. Or something in between. Or maybe they'd even change how they play, like focusing more or less on the details of the game.
Let's look at some numbers.
|Last Week||This Week||% Change|
|Pages / Session||70.5||90.01||27.67%|
|Avg Session Duration (minutes)||30.25||27.5||-9.09%|
The biggest change is that nearly twice as many seasons were played. And since the number of new leagues went up only 51%, it suggests that people are playing more seasons per league, which makes sense.
The other interesting thing is that while pageviews per session are up 28%, suggesting that users are doing more stuff per session, the actual time played per session is down by 3 minutes. So more is being done in less time.
How has version 4.0 changed how you play? Let me know on Reddit.
Google made me do it.
Basketball GM has always allowed you to open up the same league in multiple tabs, so you can easily view multiple different screens. This was originally implemented by running the entire game in each tab. Game data was always saved to disk via IndexedDB. And when an action resulted in a change to the data (such as playing a game, signing a contract, trading a player, etc), then a signal was sent to all other tabs telling them to update their data. This was kind of a crude approach, but it worked.
When life hands you lemons, make lemonade. Since Google decided to totally invalidate the tradeoffs I had considered when designing Basketball GM, I decided to re-evaluate. I came up with two ideas: