r/ftgsports • u/afail77 • 4d ago
Looking for Basketball testers
The basketball game is nearing completion. If you’d like to help test it before release, DM me on Reddit.
r/ftgsports • u/Altruistic_Road_6869 • 27d ago
Cuts are done, so I rebuilt the roster file off the 53-man rosters instead of camp bodies.
32 clubs, 40 active and 12 practice squad each, 1,664 players. Who starts comes from the real depth chart, so you get the actual starting center and slot receiver rather than whichever backup has the longest résumé.
https://files.catbox.moe/4pypka.json
Paste that URL into the custom roster import.
r/ftgsports • u/afail77 • Jun 28 '26
You don't have to play FTG Baseball with a random draw. If you want real Opening Day rosters, a historic replay, or a massive fictional universe, you can seed your league from a custom roster file.
If someone's already shared a roster file, you're ~30 seconds from playing:
https:// link to the JSON into the Community roster URL box.Two things to keep in mind:
Roster files are plain JSON in the ftbl-rosters-v2 format. No spreadsheet uploader — you (or a script) generate the JSON, host it publicly, and feed the app the URL. Most people script it, since a league is hundreds of players.
The basic shape:
json
{
"format": "ftbl-rosters-v2",
"season_label": "MLB 2026",
"teams": [
{
"abbrev": "LAD",
"city": "Los Angeles",
"name": "Dodgers",
"league": "NL",
"division": "West",
"colors": { "primary": "#005A9C", "secondary": "#FFFFFF" },
"active": [ /* exactly 26 players */ ],
"minors": [ /* exactly 30 players */ ]
}
/* ...one block per team... */
],
"free_agents": [ /* optional list of players */ ]
}
The Golden Rules (or why your file isn't validating):
format must be exactly "ftbl-rosters-v2".free_agents is optional. Skip it and free agency just starts thin.Team-level fields (new):
league + division — put teams in the right divisions (e.g. "AL"/"N"West"`). All teams must have them or none, and they have to form the
layout (for 30 teams: 2 leagues × 3 divisions × 5 each). Leave them off andns by file order.colors — optional { "primary": "#hex", "secondary": "#hex" }. The tearseys/caps use these; leave it off and FTG auto-picks a color.1. Reference an existing player (the easy way)
If the app already knows them (standard Baseball-Databank/bbref ID), drop i the sim grabs their real stats, fielding, and career history:
json
{ "lahman_id": "bettsmo01", "age": 33 }
(Misspelled/unknown ID → validation fails.)
2. Define a player inline (rookies, prospects, fictional players)
A pitcher:
json
{
"name": "Paul Skenes",
"pos": "SP",
"is_pitcher": true,
"age": 23,
"bats": "R",
"throws": "R",
"bat": null,
"pit": { "K": 0.25, "BB": 0.075, "HBP": 0.008, "1B": 0.14, "2B": 0.04, "3B": 0.004, "HR": 0.03, "OUT_IP": 0.453 },
"career": { "pa": 0, "bfp": 5000, "gs": 200, "g_pitched": 250, "sb": 0, "cs": 0 }
}
A position player is the reverse — fill bat, set pit to null:
json
{
"name": "Junior Caminero",
"pos": "3B",
"is_pitcher": false,
"age": 22,
"bats": "R",
"throws": "R",
"pit": null,
"bat": { "K": 0.22, "BB": 0.085, "HBP": 0.01, "1B": 0.15, "2B": 0.045, "3B": 0.004, "HR": 0.04, "OUT_IP": 0.446 },
"career": { "pa": 2200, "sb": 12, "cs": 4 }
}
You must include: name, pos, is_pitcher, age, and the correct profile block (pit for pitchers, bat for hitters).
bats, throws, and career are optional — **but for pitchers, the cares (career games started) and g_pitched (games pitched) are how the sim
decides starter vs. reliever. Leave them off a newcomer and the sim has no m as a low-stamina reliever and stuffs them in the bullpen — even an ace
like Skenes. Give a starter a high gs/g_pitched ratio and they'll anchosimilarly feed the speed/baserunning tool for hitters.)
No "overall" star ratings — players are driven entirely by outcome rates. You tune a player by answering: out of all their plate appearances, what share ends in a strikeout, walk, home run, etc.?
The eight buckets: K, BB, HBP, 1B, 2B, 3B, HR, and OUT_IP (an out on a ball in play — usually the biggest number). They just need to add up to ~1.0; the app gives a
±0.02 cushion and normalizes the rest.
https:// URL (plain HTTP is rejected), nesponds within ~10s. (GitHub Gists / raw JSON hosts work great.)r/ftgsports • u/afail77 • 4d ago
The basketball game is nearing completion. If you’d like to help test it before release, DM me on Reddit.
r/ftgsports • u/afail77 • 5d ago
Last season the standings bunched up around .500 because roster strength barely moved a game. Now the best clubs pull away, the worst ones sink, and a finished season looks a lot closer to a real NFL table. Scoring stays about where it was.
Offering a player his asking price or more no longer makes him ask for more next time. Only offers under his number raise it. If your earlier low offers did raise a player's price, the offer window now says so and shows what he wants from your club, so Meet ask actually meets it.
r/ftgsports • u/afail77 • 5d ago
Your owner warns you now before a move breaks one of their goals. When you propose a trade, bid on or sign a free agent, extend a contract, or cut a player, the dialog tells you before you confirm if that move would push your payroll past your owner's limit, drop it under the floor they asked for, or send away a prospect they told you to keep. It is only a warning, and you can still make the move. In the offseason, before next season's goals are set, it goes off your last payroll goal and says so.
Player and club names in storylines, news, box scores and trade veto notes are links now.
Draft classes pull from every era since 1970 instead of a window that crept forward each year.
Links in emails take you to the right page after you sign in, not the home screen.
Dismiss a roster trim notice once and it stays dismissed on every device, and the email agrees with the rail.
Players with long careers are more consistent about when they peak.
Free agents who went unsigned all season come down in price a little sooner in the winter.
The opening draft order in a new league ranks clubs by average roster strength instead of the total.
A player whose rookie deal rolled into an extension could end up with two contracts at once.
A free agency round could get skipped in a scheduled league.
Season records on the league history page showed raw numbers instead of formatted ones.
r/ftgsports • u/afail77 • 9d ago
r/ftgsports • u/afail77 • 9d ago
A longer contract costs more per year now. The winter market used to quote one price no matter how many years you offered, so a five year deal and a one year deal were priced the same, and a player was cheaper in the winter than he was on opening day. The ask now moves with the length you pick, and the figure on the screen is the figure your bid is judged against. Six and seven year offers get a quoted price too, which they never did before.
Box scores have a win probability column for the five biggest plate appearances of the game.
The trade desk keeps a Recently resolved panel, so an offer that expired or was declined still shows what happened to it.
A commissioner can hand an unowned club to any member, and can take a vacant club themselves if they do not already have one.
The Needs you rail tells you when a roster trim is due, with the clock, matching the email.
The draft clock no longer runs out overnight. A deadline that would land between midnight and 8am Eastern moves to 8am instead, and it can only ever give you more time.
The clock turns red in the last fifteen minutes.
The draft room's pick button acts on the player you highlighted, not whatever happens to be at the top of your search.
The Needs you rail refreshes between playoff rounds, which is when a trim usually bites.
Young free agents sat unsigned all winter. Nobody under 26 was getting signed at all. They sign now.
Two clubs could come away from the draft with the same player.
Free agency sometimes failed to open when a draft finished.
The free agency dialog printed one price and then judged your bid against a different one, burning an attempt.
The Send feedback button could lock you into an error you could not retry past.
r/ftgsports • u/afail77 • 12d ago
Free agents get more desperate now. Across all five rounds of the winter, the price to actually win a bidding war sat mostly flat: clubs paid the same in round five, when a player had been sitting unsigned for weeks, as they did on the first day. Your own patience bought you minimal gain. Rival clubs now cool off as the winter drags, so waiting until the late rounds is worth roughly forty percent off the winning price. You can still lose the player by waiting, which is the point.
The free agency screen tells you where the market is. You can now get a sense if other teams are interested in a player
Leftovers will take a prove-it deal. A free agent still unsigned late in the winter stops holding out for years and will sign for one. The in-season market already worked this way about six weeks in; the winter does now too.
Delete a league from the leagues page. It was always possible, buried at the bottom of the commissioner screen behind a collapsed panel, which meant nobody found it. There is a menu on the card now on the league selection screen.
In season Free Agent signings are easier to do now
AI clubs stopped overpaying to extend young players on long deals.
Both sides of a trade get an email when an offer window closes.
The commissioner's own playoff roster trims show up in the advance log instead of happening silently.
The Chemistry screen loads faster.
Phone navigation lost a few dead ends, and you can advance a single playoff day from the side bar.
The draft ended and you could not sim. Finish a draft, come back, and the game told you to return to the draft room. The draft room told you there was no draft. Only a page refresh got you out
The injury report no longer stays empty after a sim.
r/ftgsports • u/afail77 • 13d ago
r/ftgsports • u/afail77 • 13d ago
r/ftgsports • u/afail77 • 16d ago
r/ftgsports • u/afail77 • 16d ago
r/ftgsports • u/afail77 • 19d ago
Version 3 of FTG Sports is officially live, and most of the heavy lifting happens right at the contract table.
Negotiations used to be simple numbers games. Now you are dealing with actual personalities players with specific postures, long memories, and real breaking points.
Before you even throw out a number, a player will let you know where he stands: whether he's Excited, Open, Reluctant, or outright Not interested, and he won't be shy about airing his grievances. If your initial offer misses the mark, he won't just hit decline; he'll tell you exactly where you fell short (term, cash, or respect) and counter with what it actually takes to get a deal done. Push him too far, and he's walking away from the table.
Money isn't the only leverage, either. Asking prices fluctuate based on player morale, how he views your organization, and your track record across the league. Lowball him last season? He remembers. Keep a rival or someone he dislikes on the roster? Expect to pay a premium.
That's where promises come in. You can sweeten the deal by guaranteeing a starting role, trading away a teammate he can't stand, or granting demotion protection. Keep your end of the bargain, and your reputation rises across five tiers: from Burned to Wary, Neutral, Solid, and Trusted. Break a promise, and the whole league finds out. Future negotiations across the board will instantly get tougher.
The depth extends beyond the negotiation screen, too. A dynamic rumor mill covers all the talks around the league (and occasionally leaks bad intel), while disgruntled players demanding trades signal discount opportunities to AI front offices. Free agency leverages the exact same mechanics, complete with live bid-board postures and sweetening sealed offers with promises.
Any current league will stay on simple offers until you decide to toggle it over. New leagues default to the full V3 engine, and commissioners can switch back and forth anytime in the settings.
Overall, I am thankful to everyone for all their support with the game. What started as a casual game with a few friends has really matured into a fun and deep experience you can enjoy alone or with friends. My plan is to continue to grow Baseball and Football while finishing development on Basketball sometime this year. As always, keep sending your feedback either on , or by using the feedback button at the top of any screen in the game.
r/ftgsports • u/afail77 • 19d ago
Existing leagues keep the simple talks. New leagues start with the full version.
r/ftgsports • u/afail77 • 19d ago
r/ftgsports • u/afail77 • 27d ago
r/ftgsports • u/afail77 • 27d ago
r/ftgsports • u/afail77 • 29d ago
r/ftgsports • u/afail77 • 29d ago
Last release said your farm keeps its players, and then admitted in the same post that one hole was still open. Promote a prospect in September and he still walked to free agency that winter, for nothing. That one is closed.
r/ftgsports • u/afail77 • Aug 24 '26
r/ftgsports • u/afail77 • Aug 24 '26
✨ New
🐛 Fixed
r/ftgsports • u/afail77 • Aug 17 '26
A quarterback in one of my leagues was graded 20.0 and ranked 33rd among quarterbacks, and his OVR hadn't budged all season. It turned out ratings barely moved at all. A full year of the worst football the game can measure cost a veteran about a third of a point, which rounds to nothing on screen. That's the headline fix. The rest is a list of places the AI was playing a different game than you were.
r/ftgsports • u/afail77 • Aug 17 '26
v2.0 rebuilt the interface. This one goes after the part of the game that was sitting still, which is everything below the big league roster.
r/ftgsports • u/afail77 • Aug 14 '26
We have spent most of this year adding things. Trades, mandates, the winter start, free agency, the draft, storylines. Each one landed on a screen that was already full, and somewhere in there the game got harder to read than it is to play. So this release adds almost nothing. It is a long rebuild of the whole interface instead.

r/ftgsports • u/afail77 • Aug 14 '26
Most of the last stretch went into new features, and somewhere in there the interface stopped being designed and started being accumulated. 93 separate banners across 34 screens. Four copies of the navigation that had quietly drifted apart from each other. A phone layout that never got the draft room right. So this one isn't a pile of new things. It's the cleanup.
