Posts tagged "New Feature"
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 "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:
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:
New feature in version 2021.05.31.0967 - players can now play through minor injuries.
You can control what your team does with these new sliders on the roster page:
Over at zengm.com it says:
Simulation games need depth, but they need the right amount of depth with a UI to help you make sense of it. We seek to avoid mandatory micromanagement as much as possible. Video games should be fun, not tedious.
One area where my games have failed in that regard is finances. Finances can be optimized through micromanagement, and that sucks. Today one area of finance micromanagement has been removed: ticket prices.
Football GM has long deserved some updates to the core of the game. Here are some.
First, and most importantly, there are new player ovr formulas for all positions. In my opinion, this was the biggest problem with FBGM. Too many players would consistently overperform or underperform their ovr rating, which made the game feel random and unpredicatable. That's especially bad in a football game, where the small number of games per season and single elimination playoffs already makes it pretty unpredictable.
In last week's blog post about historical stats, I mentioned a few things that were missing. Today a couple of those are fixed.
Contract history for all players is now included in real players leagues. There are a couple caveats. It only goes back to 1985, because that's all the data I have. And the contracts are "BBGM-ified" - adjacent years are merged together to all be exactly the same amount, because BBGM does not support contracts that change over time. I'm not sure if this is actually a good idea... it is needed for the current contract, due to the aforementioned limitation in BBGM, but in theory I could instead import contract history that changes overtime.
Retired jersey numbers are also now included, at least for franchises with retired jersey numbers. The caveat here is that it's only retired jerseys for actual players. Some teams have retired jersey numbers for other people like coaches and announcers, and I could add those too. It's just that I don't have data on when those retirements happened. So for instance, if you start a league in 2000, I need to include only retired jerseys from up to 2000. For players I can do that by looking at when they retired. But I don't have that data for non-players, and I didn't want to go through and try to manually figure it out.
Despite the caveats, I hope these new features make real players mode even more immersive than it already is :)
It's almost a year since real players were added to Basketball GM. Today there is another big improvement to this feature: historical stats.
When starting a new realy players league, there is a new Historical Stats setting:
The default on PCs is All seasons, active and Hall of Fame players only. That means you'll see the full career stats up to the current season for all active players, and the Hall of Fame will be fully populated as well.
The default on mobile is None which is the same as it used to be. This is just because loading the stats uses a fair amount of bandwidth and disk space, so I'm wary of making it the default on mobile.
But the really cool option is All seasons, teams, and players. That gives you the full league history back to 1947, including:
New feature: customizable tiebreakers for where teams rank in the standings!
Previously tiebreakers were random. It's always a little frustrating to find yourself on the losing end of something and have the answer be "oh well it's just random". Makes you feel powerless. Especially in FBGM, where the last playoff team has a legitimate shot of winning a title.
In version 2021.02.15.1049 all leagues will be upgraded to the new default tiebreakers, which are:
- Head-to-head record
- Division winner
- Division record (same div)
- Conference record (same conf)
- Margin of victory
- Coin flip
- Head-to-head record
- Division record (same div)
- Common opponents record
- Conference record (same conf)
- Strength of victory
- Strength of schedule
- Margin of victory
- Coin flip
Additionally, when you view the standings, there is now a "Tiebreaker" column showing how ties were resolved. (Continue reading for more detail on this.)
And at Tools > League Settings, you can edit the "Tiebreakers" setting to apply any ordered combination of those tiebreakers in your league.
It's common to want to know the history between two teams. What's their all time record? What about playoff matchups, or when they met in the finals? Previously in Basketball GM there was no way to know this without looking through old box scores and playoff brackets.
But now that has changed! Head-to-head results between teams are now tracked (albeit only for games from now on), and the data is viewable on two new pages.
In Real Players leagues, player ratings are based on player stats. It's not perfect, but it works fairly well.
Setting ratings for draft prospects is a more controversial topic, because there's no perfect way to do it. With hindsight, we know some top picks were busts and some late picks were stars. How should those players be rated as draft prospects? Should the future star be rated high like we know he eventually became, or low like he was percieved at the draft?
Previously, BBGM did real draft prospect ratings based on rookie season stats, which in practice usually turns out to be a compromise between those two extremes. Overall I'm pretty happy with that as the default, but I recognize that there is no one true way to set draft prospect ratings, it really comes down to personal preference.
That's why today I added an option for this when creating a new Real Players league. From the league creation screen you can find it under "More options".
Biggest Trades: Trades involving the best players and prospects.
Most Lopsided Trades: Trades where one team's assets produced a lot more value than the other.
You can find them within a league at Tools > Frivolities.
When you make a trade in Basketball GM or Football GM, a summary of that trade is logged and shows up in the transactions list and the news feed. A mildly annoying thing about that is how it handles draft picks. Sure it'll say the trade included a 2021 2nd round pick, but if you check back after the 2021 draft, there's no new information. It doesn't say which player was selected with the pick, which makes it difficult to evaluate trades.
I've gotten many requests to do something about that, and I'm happy to announce that I have finally done something!
I just added a fun new feature to leagues with God Mode enabled. Now you can determine who wins a game before you sim it.
On the Live Sim page you can set the winner of any of today's games:
Start real players leagues at different times (preseason, playoffs, draft, after draft) in any season
Portland fans, have you ever wondered what would happen if this draft went differently?
Dallas fans, have you ever wished for another shot at these playoffs?
One of the fun things you can do in Basketball GM is re-run historical situations. But the ones above were tricky to do, because although you could create a league with real rosters from 1984 or 2007, you could only start at the beginning of the season. Play the whole season again and maybe Portland doesn't wind up with the #2 pick, or maybe Dallas doesn't play Golden State in the first round.
That's why today I'm releasing a new feature. In addition to being able to start each historical season in the preseason, you can also start at the beginning of the playoffs, the draft, or after the draft:
This is also true for the current season, so you can create leagues starting today, right before the 2020 draft.
Go give it a try now, or read on for more details.
I just added a trade deadline to Basketball GM and Football GM. By default, it happens 60% of the way through the season, but you can change the timing or completely disable it in the God Mode settings under "Trade Deadline".
The trade dealine is visible in the list of games at the top of the screen and on the schedule page. There is also a new entry in the Play menu, "Play until trade deadline". These will only appear for new seasons started after loading the latest version of the game. So for existing leagues, you will have to wait until next season to have a trade deadline.
Basketball GM has always had a concept of player mood. It was the red/yellow/green rectangle you saw on the free agents page, along with descriptive text like "Insulted by your presence" on the negotiation page. But it had a lot of drawbacks.
One major problem with the old mood system was that it did not give you much information. Why is a player happy or sad? Who knows. Behind the scenes there was a logic to it, but it wasn't displayed to the user, leaving you to guess why a player felt a certain way.
Even worse, mood was not displayed during the season. So you'd go into free agency with no idea whether you'd see the dreaded "Refuses to negotiate" message next to a player's name. That made it very difficult to plan ahead for players who are planning to leave.
You may have noticed that the previous paragraphs are all written in the past tense. That's because Basketball GM now has a brand new mood system, that fixes those major problems from the old system and introduces some nice new features too!
Basketball Reference has a lot of cool features. One of those cool features is Game Highs, where on every player page you can see a table of their highest single game statistical outputs, broken down by season or career. So for each player, you can see the most points, rebounds, assists, etc. they ever recorded.
Now Basketball GM has a very similar feature, also called Game Highs. You can view it in two places. First, in the Game Highs table on each player profile page:
If you watched the 2020 NBA All-Star Game or The Basketball Tournament, you're familiar with the Elam Ending, an exciting and creative new idea in the basketball world. If not, check out this great introduction by Zach Lowe, which was how I first heard of it a few years ago.
The basic idea is pretty simple. Instead of a game ending when time runs out, have it end when a team hits a target score. But how do you pick the target score, so it doesn't come really early or late? You start a game like normal, play up until you hit some time limit, and then set the target to be "the leading team's score, plus some extra amount". For example, say with 4 minutes left in the 4th quarter in a 93-90 game, suddenly the clock disappears and it becomes "first to 101 wins".
There's a lot of advantages to this system. No parade of free throws as the losing team fouls to catch up - with the Elam Ending, fouls never help you. No endless timeouts to save precious seconds on the clock - with the Elam Ending, there is no clock. No boring ending with the winning team just trying to run out the clock - with the Elam Ending, you can't win by doing nothing, you need to hit that target score.
It's such a clear and obvious improvement that it went from some random guy's crazy idea to the NBA All-Star Game in a matter of years. And now it's reached yet another milestone: the Elam Ending is in Basketball GM!
Different people play Basketball GM in different ways. Although most people play it to manage a team and try to win, some people play it just to watch what the AI does or explore "what if" scenarios. And that's a completely valid way to play the game. As a big Civ 4 fan, I enjoy Sullla's Civ 4 AI Survivor series, which is based on that same idea of just watching the AI play in some contrived scenario.
Basketball GM has long supported this type of play with the Auto Play feature, where the game will simulate a big chunk of time with the AI controlling all teams. The problem was that the UI was only good for big chunks of time. Want to watch individual games, see the draft pick by pick, or see how long the top free agent lasts before signing? That is all nearly impossible with Auto Play.
To address this shortcoming, today I released a new feature called Spectator Mode. It's similar to Auto Play in that the AI controls all teams. But it's different in that you control the pace of play, just like normal in BBGM. Want to stop for game 7 of the finals, see the draft lottery, or watch the expansion draft? You can do that all in Spectator Mode.
Back in the old days, there was no way to switch your team in Basketball GM. If you got fired from your job, it was game over. Try again a new league. In part that was just because I hadn't gotten around to adding that feature yet. But also I thought it might be a good way to ensure a league database never grows too large, because at some point you were bound to get fired.
This turned out to not be a very popular feature. People found it too harsh to be forced to quit playing their league. So eventually I made it so you could switch to a new team after getting fired, and also added the ability to switch at any time in God Mode.
This introduced another problem. The game wasn't really designed to support switching teams, so there was no way to easily view your performance was across all the teams you managed in league history. But today there is!
Now you can go to Teams > GM History to view a summary of your overall performance as a GM, tracking all the seasons for all the different teams you managed. Here's what it looks like:
Generating player contracts is tricky.
In the past, contracts were generated from a simple formula based on factors such as age and player ratings. That works pretty well, at first glance. Good young player? Big contract. Bad old player? Small contract.
The problem is, that's simply not how contracts are set in reality, and for good reason. It lacks a global perspective. Like if no team has max cap space, or if there are better free agents they'd rather spend it on, then it doesn't matter if a player thinks he "deserves" a big contract. This resulted in situations where sometimes good players would go unsigned in free agency, because no team had enough money to meet their demands.
Today, there is a new contract generation system in BBGM that solves this problem by incorporating a global perspective. Contracts are generated with knowledge of how much cap space teams have and what other players are on the market. So if, due to some random fluke, you find yourself with a very good free agent class in a league without much cap space, players will ask for less money. Or if you find the opposite, a poor free agent class in a league where teams have tons of money, players will ask for more money.
Give it a try and let me know what you think. Or read on for more details about how it works, which is pretty cool.
Basketball GM and Football GM now have jersey numbers for players! This is something people have been requesting for a while. It took me so long to do it because I just don't really notice jersey numbers. If you quizzed me on jersey numbers of popular athletes, I would fail horribly. But this isn't about me, it's about you guys! And I know jersey numbers are important to a lot of you.
You can view jersey numbers in a few different places: on player profile pages, on the Player Bios page, and on the little popup when you click the stats icon next to a player's name. On player profile pages you can also see the full history of jersey numbers for a player, which was inspired by Basketball Reference:
Recent development, some small improvements (including AV for kickers and punters!), and future plans
Football GM has been in an interesting place in 2020. I haven't given it a lot of direct attention. I've been a lot more focused on Basketball GM. Despite that, Football GM has gotten a lot of improvements. This is because BBGM and FBGM are built from the same codebase. Except for very sport-specific things, any improvements are made in both games at the same time.
All of the recent improvements to FBGM (individual player import/export, challenge modes, the news feed, more frivolities, etc) were made this way. I was focused on improving BBGM, and FBGM just automatically benefited.
New feature! You can export a subset of players from a league, and import them into another league. Access these features by going to Tools > Import/Export Players.
Both importing and exporting are quite flexible. For export, you can pick any player in your league's history - current players, players from past seasons, or draft prospects.
Then when importing, you have even more options:
A bunch of new options for league creation: challenge modes (no draft picks, no free agents, no trades, no visible ratings), player development realism, and more
Today I added a bunch of fun new features to Basketball GM and Football GM. They're all available when you create a new league, by clicking the "More options" link at the bottom.
Different types of leagues will have different options available. This is what you see when creating a new "real players" league in Basketball GM, which has almost all of the new options available:
Some of those options (challenge modes and real player development determinism) are also available in God Mode, where you can change them in any existing league.
What exactly do all of these new options do?
Today I added a News Feed to Basketball GM and Football GM. You can see it by going to League > News Feed. It's similar to the old Event Log and Transaction pages, but with some significant improvements:
Each event has a "score" associated with it, which is used to filter stories. By default, it only shows you "important" news. The score formula is different for different types of events. For example, for injuries the score depends on injury severity, how good the player is, if it's the playoffs or not, and if he's on your team or not.
There are filters to show events based on season, team, importance, and category.
It's more comprehensive. The old event log was missing some events, such as league rule changes.
It looks better, including team logos and player photos.
Top headlines also appear on the Dashboard, replacing the old "Upcoming Games" and "Completed Games" sections which have been kind of redundant after I added the scrolling list of scores at the top of the screen.
Last month when I added real historical rosters, I didn't go all the way back to the beginning of the league in 1947, I stopped in 1956. Why 1956? Because that's the first year where all the teams remain active until today. Prior to 1956, it was common for new teams to join the league and existing teams to fold. I did not have a good way to support contraction of teams in Basketball GM, because many parts of the code assumed that all teams were active.
Today that has changed. Basketball GM now supports "inactive" teams, which means it can simulate contraction like occurred prior to 1956. I have extended real rosters back to 1947 and added pre-programmed contraction and expansion for those crazy early years.
After you've played several years in a league, it can be fun to go to Tools > Frivolities and ask questions like "which player has the most relatives?" and "who had the longest career without ever making the playoffs?"
If you enjoy the current frivolities, then I think you're going to love the 12 new ones I just added today! All available in the same place, Tools > Frivolities, in both Basketball GM and Football GM. The main frivolities page has also been redesigned, and individual frivolities now contain a menu linking to all other frivolities for easier navigation.
The new frivolities are:
Now that Basketball GM has real rosters back to 1956, it's possible to make all kinds of fun fictional rosters using real players. Today I am releasing "Legends" mode, which lets you create a league where each team is filled with the best players from that franchise.
You can either start an "All Time" legends league using all players, or pick a decade to be restricted to teams and players from that decade. Give it a try or read on for more details about how the rosters are generated.
Part of the fun of using real rosters back to 1956 is watching league rules change over time. Historically, the draft lottery sure changed a lot. And today, Basketball GM just got much better support for historical draft lotteries.
You can switch your league to any of these new draft types in the God Mode settings, or if you're playing a historical league the draft type will automatically change over time.
Update 2020-05-11: This is no longer in beta, you can play it on the main site.
A couple weeks ago I released real players in Basketball GM back to 2005. Why 2005? Because any time before that needs to deal with expansion teams, and I wanted to have a good way of handling that. Additionally, beyond the number of teams, there are many other things that have changed over time - team relocations, changes in style of play, various rule changes - I wanted to have decent ways of handling all those things.
Today I do. At least in a beta.
Start in any season back to 1956. Players, teams, rosters, and contracts are generated from real data. Draft classes are included up to today.
Watch your league evolve over time. There were only 8 teams in 1956, playing a very different brand of basketball than today. Live through expansion drafts, league rule changes, team relocations, economic growth, and changes in style of play.
Every league is different. Draft prospects always start the same, but they have different career arcs in every league. See busts meet their potentials, see injury-shortened careers play out in full, and see new combinations of players lead to dynasties.
These rosters include players, teams, awards, relatives, contracts, and future draft classes.
It is not perfectly realistic. Some of that is simply because it's new. Please give me feedback and I will improve the rosters. But some of it is because Basketball GM is not a perfect simulation of reality, so it cannot 100% accurately represent the real world. I'm trying my best to strike a balance between simplicity and realism, but there is always room for improvement!
Basketball GM has always been made up of randomly generated players on fake teams. Real teams and players were only available as unofficial third-party custom rosters. A lot of people have done great work there, especially alexnoob and nicidob. But it's still not the same as having real rosters integrated into the game itself.
Today, I'm releasing a new version of Basketball GM that, for the first time, includes real players built-in. Just pick whichever option you want when creating a new league:
Basketball GM and Football GM can be played at whatever speed you want. Some people like to fly through decades as fast as possible. Others like to micromanage each season. For people who play fast, one annoying thing is when you forget who your players are. Like you're looking at your roster and you think... is that the guy I drafted last year, or the guy I traded for, or the free agent I signed?
Now, you can easily answer this question on the roster page by looking in the new "Acquired" column, which will tell you how each player was acquired. It looks like this:
Players in Basketball GM and Football GM now may be assigned a college when they are generated. This doens't impact gameplay in any way, it's just for fun.
In sports games like Madden and NBA 2k, teams generally have a rating on a 0-100 scale. Basketball GM never had a similar feature... until today! Now you can view team ratings on the Roster and Power Rankings pages. Eventually I hope to put them in even more places.
So, how are the team ratings generated?
In the past, each player (except quarterbacks in FBGM) had an equal probability of getting injured. That's now been changed to give older players an increased injury risk and younger players a decreased injury risk. This both makes sense and is supported by data showing a 3% increase in injury risk per year as a player ages.
One of the most common feature requests has been to add an All-Star Game. I was always kind of reluctant to do it, both because it'd be a little messy to implement and because the All-Star Game doesn't actually matter, right? It's just a diversion. It's just, you know, fun. Like a video game is supposed to be. Yes, even a text-based simulator like Basketball GM still needs to be fun. So now there is a nice fun All-Star Game. Go play now to see it for yourself, or read on for details.
The annual message from the owner has long been a quirky feature of Basketball GM. Each season, you'd get some strange message from the owner about your progress. By reading it, you could figure out how close you were to getting fired.
There were problems though. The messages got repetitive if you played a lot. Sometimes the messages were confusing and possibly buggy, like if you win the title and the owner is still not happy with how much you're winning.
Also the messages were often racist, sexist, or otherwise offensive. In my defense, those were all paraphrases of things our wonderful real life pro sports owners have said. But I don't think everyone got the joke.
Overall, it was not a great system. Finally, I have replaced it. Instead of the long old messages, you get a short message containing your overall performance, your performance in the past year, and a quick recommendation for next year. Also, you get a chart of your past performance, which looks like this:
I deployed two changes today in version 2019.08.31.0916.
The regular season schedule is more balanced. All teams will play an equal number of home and away games, and all teams will have one home game and one away game with each other team in their division.
Division winners are guaranteed a top 4 seed in the playoffs, even if they have a worse record than some non division winners.
As always, let me know if you notice any problems!
No huge news here, sorry, but there are a few minor improvements in version 2019.08.18.0097:
A lot more tables (such as Draft Summary) are searchable, filterable, and downloadable. There's still a few that aren't. Let me know if that's a problem. Also let me know if I messed anything up with this change, since the table component is used in many many places!
In the past, when you got fired, the AI would never actually change your finance settings back to something reasonable. So if you made them unreasonable, the results would look silly. Now the AI resets their finance settings every year.
The Hall of Fame cutoff adjusts based on the number of games in a season and the length of a quarter. Previously, short leagues would have empty HoFs and long leagues would have tons of HoFers.
Specifically, the cutoff is multiplied by
sqrt(quarterLength / 12) * numGames / 82. The square root is to account for fatigue in games - shorter games mean the starters play a higher fraction of the game (and the cutoff should be a bit higher) and longer games mean the opposite.
As always, let me know if you notice any problem with this stuff, or if you have any other feedback!
For a long time, Basketball GM has let you view draft classes up to three years in the future. Similarly, for people making custom roster files, it's been possible to define up to three years of draft classes in the file.
But what if you want more? Like if you want to make a file for the NBA in 2003, with every draft class up to today? Previously that wasn't possible, but now it is.
One thing I like about Baskebtall Reference is their Frivolities page. It's a bunch of unrelated tools that are mostly useless unless you have some very specific curiosity. And it's awesome! Not everything needs to have mass market appeal. Not everything needs to be serious and important. Frivolities are great.
Now Basketball GM (and Football GM) has frivolities too, as of version 2019.05.27.0877. Within a league, go to Tools > Frivolities to see them. Currently there are four tools - two of them inspired by Basketball Reference, and two of my own.
Most Games, No Playoffs - like Basketball Reference, this lists players with the most games played who never made the playoffs.
Relatives - lists players with relatives in the game. It also lets you click an individual player and to view his immediate family, and from there you can click other family members to explore the family tree. There is a link pointing to the individual family page from a player's main profile page if he has relatives.
Roster Continuity - like Basketball Reference, this is a color-coded visualization of year-to-year changes in roster composition.
Tragic Deaths - a list of all the tragic deaths that have occurred in your league. This would be a little dark for Basketball Reference I think, but for fake players in a video game, it's good clean fun!
Today I made a few changes to the draft lottery.
First, it now uses the same method the NBA will be using for the 2019 NBA draft. However there is an option in God Mode to switch it back to the old lottery method, or to disable the lottery entirely.
There is also now better support for non-standard league configurations. In the past, the lottery was always 14 teams, which is the number of non-playoff teams in a default league. But for leagues with different numbers of teams or different playoff lengths, you would then either get playoff teams in the lottery or non-playoff teams missing the lottery. Now it will adjust the number of lottery teams so it is always equal to the number of non-playoff teams.
When you're trying to make a trade, you can click the "What would make this deal work?" button to get a counter offer from the AI team you're trading with. Often this results in the AI asking for something you really don't want to give up, like your best player or a high draft pick. Then what you really want to say to the AI is, "okay, you can't have that, but is there any other assets I have that could make this deal work?" But there was no way to ask that. Until now!
Today I released an update to Basketball GM containing a lot of small improvements to the UI. Most of them are small tweaks that, when seen in aggregate, will hopefully just make the game feel a bit cleaner and smoother.
But there's also some sexy.
When I make a small improvement to Basketball GM, it feels silly to write a whole blog post about it. But if I don't, some people will never realize what happened. So maybe this is a good idea: a single blog post explaining several recent small improvements.
Today I released a new feature: difficulty levels! You can pick whether you want the difficulty of your league to be easy, normal, hard, or insane. You can do this when starting a new league, or you can change it at any time by going to Tools > Options.
This feature has been requested a million times, but today it's finally here: draft day trades! You will see it in all your leagues (if not, refresh the page until it says version 2018.05.11.1253 at the bottom), there are some new buttons on the draft page to make it easy.
Ever since the beginning, trades have not been allowed during the draft. The reason for this was a bad design decision I made: when the draft order was set, I moved the draft picks to a special table containig the picks and order for this year's draft. This worked, but it was needlessly complicated (extra table for no reason, why not just leave it in the main one and filter for this year?) and it meant that code for trading picks didn't work once the draft started.
I finally went back and got rid of that bad design, but it took a lot more time than it would have if I just did it right in the first place!
In the great novel "The Universal Baseball Association, Inc., J. Henry Waugh, Prop." by Robert Coover, the title character starts to lose it when a young star player dies in a freak accident. The death was particularly meaningful because the young star wasn't just anyone. He was the son of another player, a legend himself. Not that I want anyone to go crazy, but shouldn't Basketball GM at least have the complexity of a fictional baseball simulation game played with dice, paper, and a pencil?
Well now Basketball GM has family relationships! Players can be brothers, fathers, and sons of other players. Here's what it will look like on player pages:
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:
- Two new ratings offensive IQ (OIQ) and defensive IQ (DIQ), which replace the old BLK and STL ratings.
- Potential (POT) has been redefined so it is much more accurate and realistic.
- There are more statistical outliers, particularly as you play many seasons.
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.
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.
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:
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.
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 technical details - caching, Shared Workers, IndexedDB/Promise interactions, Safari being a tease, McDonald's, and more
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:
This is not an April Fool's Day joke! Basketball GM 4.0 is really here, and it's awesome. For those who haven't been following along, here are the biggest changes:
- The game runs ridiculously faster than it used to.
- It's so fast that it's actually playable on phones and tablets (iPhone/iPad support is pretty flaky still, but should improve in the near future).
- You can easily apply complex filters to tables.
I'll make another post with more technical details soon, for those who are interested in such things.
Thanks you everyone for testing the first beta! All of the bugs people found have been fixed. The biggest change from the first beta is that multi-tab play is back. There are two caveats. First, you can only have one league open at a time. I figure this is not a huge problem, but let me know if you often do have multiple leagues open. Second, it is a little slower than the first beta, but still much faster than it used to be.
Also, multi-tab play does not work in Safari, so you can either play one tab per league in Safari or use another browser.
With that being said, here's the link to beta 2, please give it a try. To make sure you're on beta 2 and not the original beta, look at the bottom of the page. It should have a date of 2017.03.24.1059 or later.
I'll make another post with more details later, but right now, the beta brings some good and some bad:
Good: Performance, performance, performance. Depending on your computer and browser, you will find it about 10 times faster. That is a lot.
Good: It works in Safari now, although it's not that well tested.
Bad: You can only open a league in one tab at a time. I do have plans to restore multi-tab play, but I didn't want to hold up the beta for it. And single-tab mode will be needed as a fallback mode in some browsers, so it will be good to test it. Please do give me feedback on this. If single-tab mode is horrible, I will prioritize multi-tab mode.
(Also, accounts don't work on the beta. They aren't supposed to. That's not a bug.)
Until today, Basketball GM was hardcoded to always have 2 conferences, 6 divisions, and 16 teams in the playoffs. If you wanted to set up a league with a different structure, you were out of luck.
But today that has changed! You can have any number of conferences and divisions, and the number of teams in the playoffs can be any power of 2 (2, 4, 8, 16, 32, etc). Unfortunately this is only customizable by making a league JSON file, but it's not that hard, I promise. Here is the documentation and here is an example file with 3 conferences, 6 divisions, 12 teams, and a 4 team playoff.
Please let me know if you notice bugs related to this!
Previously, player names in Basketball GM were generated based on a list of name frequencies in the US in 1990 published by the US Census Bureau. In some ways this was awesome - it was a huge list of names, so there was a lot of variety. However the US population in 1990 does not exactly correspond to global basketball talent. There should be more African American names and there should be international names from basketball-loving countries.
I never fixed this problem because there wasn't any data I could find that was nearly as good as the census data I used previously. But now I think I have a better solution: DraftExpress. DraftExpress is a website about the NBA draft. It has player profiles for basically every NBA prospect in recent history, even fringe guys like minor college players and roleplayers in overseas leagues. That's a pretty good sample of the distribution of basketball talent, right? Maybe not perfect, but probably good enough to be better than the previous names list.
So I used my trusty wget to scrape draftexpress.com, and then I wrote a script to parse names and countries for all players in their database. After a little work to clean up the data (splitting names into first and last names while handling extra spaces like Nando De Colo; fixing typos in country names), I filtered the list of countries to get rid of those with less than 5 names because they would just become too repetitive. So sorry Suriname, you and your 2 names are gone. That left me with 28,377 names from 85 countries. To generate a player, the game randomly picks a country and then randomly picks first and last names from that country.
Particularly cool things about the new names:
- No more leagues dominated entirely by people with mid 20th century white names.
- Increased realism, as you see a good number of players from expected countries like Spain, Lithuania, etc.
- Every now and then, you'll have a Brazilian player with no last name (like Nene and many soccer stars).
- Rarely, there will be players from tiny countries. Like if you play 5000 seasons you might see an Icelandic dude named Elvar Vilhjalmsson dominating shit, how cool will that be?
This is live now, even in existing leagues new draft prospects will be generated with this new naming method. And you can see the countries of all the players in your league by going to the Player Ratings page.
The default teams now have logos! Thank you Elliott Strauss for all your hard work!
Currently you'll only see the logos on the roster page, which doesn't really do them justice. Eventually I will do a redesign to better utilize them. In the mean time, check them out here in their full glory:
Basketball GM has long supported a "Shuffle Rosters" option when you start a new league from a file. However it kind of sucked, because it would randomly shuffle players on all teams along with free agents, often leaving tons of really good players as free agents.
Now, it will only shuffle players actually signed to teams, leaving free agents alone. This is possibly still not ideal -- maybe it would be better to shuffle in comparably rated free agents while not changing the overall talent distribution -- but it's a hell of a lot better than it used to be.
I tested it using this user-made NBA roster file, and the Warriors got what they deserved to balance off the universe. Their best player was Jameer Nelson and they wound up with the worst record in the league.
At the God Mode screen (accessible from the Tools menu), there are now 10 new options you can use to customize your league:
- Enable/disable injuries
- Numer of games per season
- Quarter length
- Minimum roster size
- Salary cap
- Minimum payroll
- Luxury tax threshold
- Luxury tax
- Minimum contract
- Maximum contract
Previously these things were all impossible (or very difficult) to change.
The caveat is, the AI might not respond well if you change some of these values drastically, particularly the financial ones. But hopefully it's still better than nothing. Let me know how you like it!
Previously, injuries in Basketball GM had no lasting effects. Once a player healed, he was good as new. In the real world, we know that's not true.
So now, in Basketball GM, serious injuries (over 25 games) can result in decreased athleticism, depending on the severity of the injury and some luck. As an example, someone who gets a 100 game injury (probably a torn ACL) will have a 50% chance of making a complete recovery, but also a 67% chance of losing between 0 and 10 points of his speed, jumping, and endurance ratings, and also a very small chance of a much larger catastrophic decrease. Each of those losses is independent, so someone might lose 1 speed, 9 jumping, and 3 endurance. Let me know if you think these numbers are too big or too small.
By default, Basketball GM uses random American names taken from the US Census. However if you’re making a custom league file designed to represent a basketball league in another country, it is annoying when the new players generated in your league all have names like "John Smith".
Now, when creating a League File, you have the ability to define the list of names used for randomly generated players. For more info, check out the documentation.
Today I added a new feature to Basketball GM called Multi Team Mode. Multi Team Mode lets you to control multiple teams within a league in the same way that you control one team by default. This enables a few new ways of playing Basketball GM:
- Live in-person multiplayer - two people sharing one computer can play in the same league together
- Extreme control - if you want to control how other teams behave, for some reason
- Online multiplayer - if you want to run a league where you are the commissioner and other people email you roster moves to make manually, you don't want AI fucking things up
To try Multi Team Mode, create a new league or load an existing league. Enable God Mode (in the Tools menu) and then a new option called Multi Team Mode will appear in the Tools menu. Click that and it will let you select one or more teams to control.
You can now go to Tools > Screenshot and it will save a screenshot of your current page to Imgur. Then you can easily share it on Twitter or Facebook or Reddit or wherever.
New feature! Go to Tools > Auto Play Seasons and you can tell Basketball GM to simulate through any number of seasons. The AI will take over your team for you and play through multiple seasons without any user input required.
I'm not sure how many people will actually benefit from this feature. I mainly made it for debugging. But I hope someone appreciates it!
Available now, view all the great performances in your league on one page. Just go to Stats > Statistical Feats. Triple doubles, 5x5s, 50 point games, etc. Eventually you will see this information pop up on player pages, team history pages, league history pages, and more. But for now, it's just on the Statistical Feats page, all in one place.
Note that this will only track performances from now on. It won't go back through the history of your existing leagues.
As of the latest version (2015.01.31.658), you can go to Tools > Export Stats within a league and export either player average stats or individual game stats. The exported file is in CSV format, which means you can easily view it in Excel or any other spreadsheet software if you want to more deeply analyze the stats in one of your leagues.
I know it's missing a couple things now (playoff stats, team stats, shot locations, ...), but I want to make sure the core feature works well before implementing all of those.
After a long beta (thanks for testing!), the new version of Basketball GM is ready. All your leagues will be upgraded automatically. The main difference is that game simulation is about 20% faster. Additionally, there are some minor bug fixes (the NaN bug is finally gone, I think) and enhancements (real injury descriptions show in old box scores and uploading exported league files is much faster).
On the downside, Internet Explorer is no longer supported. If you're an IE user, you can export your leagues still. Then you have the option of switching to Chrome/Firefox or using an old version of Basketball GM. Hopefully IE support will return to the latest version eventually, but I'm not holding my breath.
God Mode enables some features that are a little too close to cheating for me to want enabled by default. Specifically:
- The ability to create new players (this feature has been around for a while, but now it is only available in God Mode)
- The ability to edit players (available only since earlier today)
- The ability to force trades to be accepted (brand new)
This post is to announce two new features that have gone live over the past couple weeks that should enhance the customizability of Basketball GM: full league import/export and draft class import.
It has come to my attention that some people are doing things besides constantly playing Basketball GM. The game just isn't addictive enough. Maybe part of the problem is that the game has always been self-paced. There's no way to "win", and there aren't any real objectives other than ones you define yourself.
Well, now that's changed. Today I added an "Achievements" system. This provides some challenges you aim to accomplish, like sweeping all 16 wins in the playoffs, winning a title with a low payroll, and winning multiple consecutive titles. See them all here.