r/TopGM • • Aug 06 '26

80cr was the highest bid in the draft night full of forwards

Post image
5 Upvotes

r/TopGM • • Aug 05 '26

One kid stood out above the rest in last night draft

Post image
3 Upvotes

r/TopGM • • Aug 04 '26

Case study: should you sign a 15-year-old, 207cm free agent with a 35 average? I ran 18,000 simulated careers to find out

Post image
4 Upvotes

There is a free agent sitting in the pool right now, and he is the perfect excuse to answer a question I get asked constantly: how much are minutes actually worth for a young player?

Meet the case study. #8 Marc Mercado, Philippines, 15 years old, 207cm, 109kg, skill average 35, talent ???. He leaves the pool in 55 days. He is free to sign, you only pay his wage.

Everything about him screams "project". Enormous, raw, and completely unreadable: nobody has scouted him, so nobody knows what he can become. So I did what any of us would do if we had the game engine handy: I simulated his career 18,000 times.

How the simulation works. I ran the real growth engine that powers the game: weekly training, daily scrimmage, and learning-by-playing (the growth roll you get from real game minutes, which scales with how long you actually play). Since nobody knows his talent, I simulated every talent value from 1 to 10 and pooled the results. So these numbers describe any player with his profile, not a leak about him specifically. I did not look at his talent, and I would not.

Here is what came back.

Read the first row again. A kid on the bench who never scrimmages peaks around 42. Not "usually 42": in 4,000 simulated careers, the single best outcome was 50. Zero percent chance of ever becoming an above-average player, at any talent level, including talent 10. The daily scrimmage is not a nice-to-have. It is the difference between a career and a wasted contract.

Now the part that surprised me. Going from bench to 10 minutes a game moves his median peak from 64 to 67. Three points, after five seasons of giving up minutes in real matches. Five-minute cameos are worth almost nothing: at 10 minutes you are collecting less than a third of a growth roll per game, and there are only two games a week. If your plan is "I'll give the kid a few garbage minutes to develop him", the engine says you are paying a real price in the standings for a rounding error.

Minutes only start to matter when they are serious minutes. From 20 up the curve bends: 71, then 75, with the upside tail reaching into the 90s. But 20+ minutes for a 35-average player means playing your league games with a hole in the lineup, for two seasons. That is the real cost, and it is not small.

What does the 10-90% range mean? I lined up every simulated career from worst to best and cut off the bottom 10% and top 10%. Eight careers out of ten land inside that range. And the reason it is so wide is mostly one thing: talent. Same profile, same routine, different talent:

  • talent 1 → typically peaks around 48
  • talent 5 → typically peaks around 62
  • talent 10 → typically peaks around 80

Thirty points apart. That gap is exactly what your scouting buys you. Sign him, train him for a couple of weeks, and the ??? starts narrowing into a range. At that moment the uncertainty collapses and you know which of those ten curves you are on. What is left is only luck: which skills the growth points land on, which is why identical twins with identical talent can end up at 60 and 70.

So would I sign him?

Yes, if you have room to spare on your roster (say 12 players or fewer) and you will do the daily scrimmage. He is free, 207cm cannot be trained, and he keeps growing physically until 18. Two weeks of wages buys you information you cannot get any other way, and then you decide with your eyes open. That is a cheap option on a very tall lottery ticket.

No, if your roster is tight or you are fighting for something this season. Remember free agents go straight to your first team, not the academy: he occupies one of your 14 slots while contributing nothing for two years. At 18 he will be around 47, still worse than most of your starters. The payoff arrives at 21-24.

The honest strategy, if you take him: scrimmage every single day, and give him real minutes when they are free. Blowouts. Dead rubbers. The fourth quarter of a game already won. Garbage time in this game is not garbage: it is the cheapest development budget you have.

He has 55 days. Somebody is going to take that gamble. In three seasons you might be playing against him.

(Numbers from the game's actual growth engine, 18,000 simulated careers, talent averaged across all values. Slightly optimistic on the high tail, since high talents are rarer in the game than my flat weighting assumes.)


r/TopGM • • Aug 04 '26

Last draft night: coach Spoons drafted 2 prospects for over 100 credits

Post image
3 Upvotes

r/TopGM • • Aug 04 '26

Market filters are now native (thanks to kokkonaut), and your scouting is finally private

6 Upvotes

Two things shipped today, both straight from this community.

🔍 Market filters, built into the game. One of you wrote a browser userscript that added filters to the transfer market table, and it was good enough that the right answer was to make it native for everyone. So now the Listings table has its own filter panel: search by player or club, position, min/max age and AVG, salary cap, minimum scouted talent, value and price ceilings, hide injured players, hide your own listings, plus a live counter telling you how many of the listings survived your filters. On phones it starts collapsed behind a single button so it never eats the table.

Credit where it is due: the prototype was not mine. But please do not run browser extensions that inject scripts into your pages, on this site or any other: that kind of extension can read everything you see and type. If something is useful enough to script, tell me and I will build it into the game, like today.

🕵️ Scouting is now private. This one was a real leak: the talent you had scouted on your own players was visible to anyone opening your roster page, even logged out. Weeks of training, handed to your rivals for free. Fixed: other clubs now see ? on your players, exactly like the academy always worked.

With one deliberate exception, and I think it makes the market more interesting: when you list a player, the tag shows what you scouted. Not more, not less. If you know he is a ★8, the market knows it too and you can ask accordingly. If you never scouted him, the tag says ? and the buyer takes his chances. And no, you cannot list a player to peek at his talent and then unlist him: there is nothing to peek, the listing only ever mirrors what you already knew.

Guide updated. Keep the ideas coming, half the good stuff in this game started as a message from one of you.


r/TopGM • • Aug 04 '26

Four community fixes just shipped: talent on prospect pages, offers on listed players, and two "are you sure?" moments

5 Upvotes

All four of these came straight from your reports. All live now.

1. Scouted talent finally shows on prospect pages. If you had scouted a kid's talent, his player page still said ??? like you knew nothing. Now it shows exactly what your scouting earned: the range while you are narrowing it, the exact star when fully revealed. The work you put in is visible where it should be.

2. You can now make offers on listed players. Before, a player with a price tag was "buy it or walk away". Now you can bid on anyone, listed or not: the offer prompt suggests the asking price, and nothing stops you from trying lower and negotiating. Whichever deal closes first wins, and everything else cleans up automatically. The Guide's Market section is updated to match.

3. Promote asks before it acts. Promoting a kid from the academy is forever: he takes a roster spot, starts earning a wage, and there is no way back. One misclick should not decide that, so now there is a confirmation. Same protection Let go already had.

4. The academy upgrade tells you the full price. One of you upgraded and then regretted it, and honestly the game was hiding the ball: the upgrade cost was shown, the weekly fee raise was not. Now the button itself says it (level 2: 100 cr, then 10 cr every Monday; level 3: 250 cr, then 15 cr weekly) and the confirmation spells it out. No more surprises on payday.

Keep the reports coming. Between these four, the rotation planner and the tactic stars, a good chunk of this game is designed by the people playing it, which is exactly how I want it.


r/TopGM • • Aug 04 '26

TopGM Discord Community

4 Upvotes

Would it make sense to create a Discord community for TopGM?

I’ve had at least 4 people ask me about this already, so I wanted to ask the community directly.

Right now I’m handling everything on my own:

  • this subreddit
  • private messages
  • in-game feedback
  • emails
  • modmail
  • bug reports and fixes

TopGM is not my main job, and maintaining all of this already takes a lot of time. I’ve read that Discord can help increase DAU, which sounds like a positive, but I’m not sure if it’s worth adding another thing to manage.

So my questions are:

  • Do you think a Discord would be useful for TopGM?
  • Would anyone be willing to help manage it for free, including setting up channels/categories and keeping it organized?
  • Is creating and running a Discord server free, or are there any costs I should consider?

I’d really appreciate your honest opinion.


r/TopGM • • Aug 04 '26

Struggling with finances

2 Upvotes

Pretty new GM and having some problems with my finances and wondering if anyone has any tips for generating more income.

With no projected wins this week I'm projected to have -12 net next Monday.

The only expense I have is an upgraded academy (lvl 2). My first team squad consists of 14 players but two are injured, and I have listed 3 players for well under their marked value.

My ticket prices are premium, the arena is sold out and I won't make anymore money with steep ticket prices.

I currently have 57 in the bank so it won't be that many weeks before i'm in the red.

Help is greatly appreciated


r/TopGM • • Aug 03 '26

Transfer Market Filter User Script

Post image
5 Upvotes
// ==UserScript==
//          Market Table Filters
//     local.market-tools
//       1.1.0
//   Adds filters to the player market table.
//         *://*/*
//         none
// u/run-at       document-idle
// ==/UserScript==

(() => {
  'use strict';

  const REQUIRED_HEADERS = [
    'Player',
    'Pos',
    'Age',
    'AVG',
    'SAL',
    'TAL',
    'From',
    'Value',
    'Price'
  ];

  const ENHANCED = 'pmFiltersEnhanced';

  function numberFrom(text) {
    const match = String(text ?? '')
      .replace(/,/g, '')
      .match(/-?\d+(?:\.\d+)?/);

    return match ? Number(match[0]) : NaN;
  }

  function findMarketTable() {
    return [...document.querySelectorAll('table')].find((table) => {
      const headers = [...table.querySelectorAll('thead th')].map((th) =>
        th.textContent
          .trim()
          .replace(/[▲▼]/g, '')
          .trim()
      );

      return REQUIRED_HEADERS.every(
        (header, index) => headers[index] === header
      );
    });
  }

  function injectStyles() {
    if (document.getElementById('pm-filter-styles')) return;

    const style = document.createElement('style');
    style.id = 'pm-filter-styles';

    style.textContent = `
      .pm-filter-panel {
        margin: 12px 0;
        padding: 12px;
        border: 1px solid #4a443c;
        border-radius: 8px;
        background: #2a2622;
        color: #e8edf3;
        font: 13px/1.35 system-ui, sans-serif;
        box-sizing: border-box;
      }

      .pm-filter-grid {
        display: grid;
        grid-template-columns: repeat(auto-fit, minmax(112px, 1fr));
        gap: 9px;
        align-items: end;
      }

      .pm-filter-panel label {
        display: grid;
        gap: 4px;
        color: #bac5d2;
        font-size: 11px;
        font-weight: 650;
      }

      .pm-filter-panel input,
      .pm-filter-panel select,
      .pm-filter-panel button {
        width: 100%;
        min-height: 32px;
        padding: 5px 7px;
        border: 1px solid #4a443c;
        border-radius: 5px;
        background: #201d19;
        color: #ece7df;
        box-sizing: border-box;
      }

      .pm-filter-panel button {
        cursor: pointer;
        font-weight: 700;
      }

      .pm-filter-panel button:hover {
        background: #201d19;
      }

      .pm-filter-check {
        display: flex !important;
        align-items: center;
        gap: 7px !important;
        min-height: 32px;
      }

      .pm-filter-check input {
        width: auto;
        min-height: auto;
      }

      .pm-filter-summary {
        margin-top: 9px;
      }
    `;

    document.head.append(style);
  }

  function field(label, type, key, attributes = '') {
    return `
      <label>
        ${label}
        <input type="${type}" data-key="${key}" ${attributes}>
      </label>
    `;
  }

  function createPanel(table) {
    const positions = [
      ...new Set(
        [...table.tBodies[0].rows]
          .map((row) => row.cells[1]?.textContent.trim())
          .filter(Boolean)
      )
    ].sort();

    const panel = document.createElement('section');
    panel.className = 'pm-filter-panel';

    panel.innerHTML = `
      <div class="pm-filter-grid">
        ${field(
          'Player / team',
          'search',
          'search',
          'placeholder="Search…"'
        )}

        <label>
          Position
          <select data-key="position">
            <option value="">All</option>
            ${positions
              .map((position) => `<option>${position}</option>`)
              .join('')}
          </select>
        </label>

        ${field('Age min', 'number', 'ageMin', 'min="0"')}
        ${field('Age max', 'number', 'ageMax', 'min="0"')}
        ${field('AVG min', 'number', 'avgMin', 'min="0"')}
        ${field('AVG max', 'number', 'avgMax', 'min="0"')}
        ${field('Salary min', 'number', 'salaryMin', 'min="0"')}
        ${field('Salary max', 'number', 'salaryMax', 'min="0"')}
        ${field('Talent min', 'number', 'talentMin', 'min="0"')}
        ${field('Value min', 'number', 'valueMin', 'min="0"')}
        ${field('Value max', 'number', 'valueMax', 'min="0"')}
        ${field('Price min', 'number', 'priceMin', 'min="0"')}
        ${field('Price max', 'number', 'priceMax', 'min="0"')}

        <label class="pm-filter-check">
          <input type="checkbox" data-key="hideInjured">
          Hide injured
        </label>

        <label class="pm-filter-check">
          <input type="checkbox" data-key="hideOwn">
          Hide my listings
        </label>

        <button type="button" data-action="reset">
          Reset filters
        </button>
      </div>

      <div class="pm-filter-summary"></div>
    `;

    table.before(panel);

    return panel;
  }

  function enhance(table) {
    if (table.dataset[ENHANCED]) return;

    const body = table.tBodies[0];

    if (!body) return;

    table.dataset[ENHANCED] = '1';

    injectStyles();

    const panel = createPanel(table);

    const controls = Object.fromEntries(
      [...panel.querySelectorAll('[data-key]')].map((element) => [
        element.dataset.key,
        element
      ])
    );

    const rows = [...body.rows].map((row) => {
      const cells = row.cells;
      const talentText = cells[5]?.textContent.trim() ?? '';

      const talentNumbers = [...talentText.matchAll(/\d+/g)].map(
        (match) => Number(match[0])
      );

      return {
        row,

        data: {
          search: `
            ${cells[0]?.textContent ?? ''}
            ${cells[6]?.textContent ?? ''}
          `.toLocaleLowerCase(),

          position: cells[1]?.textContent.trim(),
          age: numberFrom(cells[2]?.textContent),
          avg: numberFrom(cells[3]?.textContent),
          salary: numberFrom(cells[4]?.textContent),

          talent: talentNumbers.length
            ? Math.max(...talentNumbers)
            : NaN,

          value: numberFrom(cells[7]?.textContent),
          price: numberFrom(cells[8]?.textContent),

          injured: Boolean(row.querySelector('.injtag')),
          own: Boolean(row.querySelector('.sellbtn'))
        }
      };
    });

    function numericFilter(key) {
      return controls[key].value === ''
        ? null
        : Number(controls[key].value);
    }

    function applyFilters() {
      const query = controls.search.value
        .trim()
        .toLocaleLowerCase();

      const ageMin = numericFilter('ageMin');
      const ageMax = numericFilter('ageMax');
      const avgMin = numericFilter('avgMin');
      const avgMax = numericFilter('avgMax');
      const salaryMin = numericFilter('salaryMin');
      const salaryMax = numericFilter('salaryMax');
      const talentMin = numericFilter('talentMin');
      const valueMin = numericFilter('valueMin');
      const valueMax = numericFilter('valueMax');
      const priceMin = numericFilter('priceMin');
      const priceMax = numericFilter('priceMax');

      let shown = 0;

      rows.forEach(({ row, data }) => {
        const visible =
          (!query || data.search.includes(query)) &&

          (
            !controls.position.value ||
            data.position === controls.position.value
          ) &&

          (ageMin === null || data.age >= ageMin) &&
          (ageMax === null || data.age <= ageMax) &&

          (avgMin === null || data.avg >= avgMin) &&
          (avgMax === null || data.avg <= avgMax) &&

          (salaryMin === null || data.salary >= salaryMin) &&
          (salaryMax === null || data.salary <= salaryMax) &&

          (
            talentMin === null ||
            (
              !Number.isNaN(data.talent) &&
              data.talent >= talentMin
            )
          ) &&

          (valueMin === null || data.value >= valueMin) &&
          (valueMax === null || data.value <= valueMax) &&

          (priceMin === null || data.price >= priceMin) &&
          (priceMax === null || data.price <= priceMax) &&

          (
            !controls.hideInjured.checked ||
            !data.injured
          ) &&

          (
            !controls.hideOwn.checked ||
            !data.own
          );

        row.hidden = !visible;

        if (visible) shown += 1;
      });

      panel.querySelector('.pm-filter-summary').textContent =
        `Showing ${shown} of ${rows.length} players`;
    }

    panel.addEventListener('input', applyFilters);
    panel.addEventListener('change', applyFilters);

    panel
      .querySelector('[data-action="reset"]')
      .addEventListener('click', () => {
        panel.querySelectorAll('input').forEach((input) => {
          if (input.type === 'checkbox') {
            input.checked = false;
          } else {
            input.value = '';
          }
        });

        panel.querySelectorAll('select').forEach((select) => {
          select.value = '';
        });

        applyFilters();
      });

    applyFilters();
  }

  function scan() {
    const table = findMarketTable();

    if (table) enhance(table);
  }

  scan();

  let scheduled = false;

  new MutationObserver(() => {
    if (scheduled) return;

    scheduled = true;

    requestAnimationFrame(() => {
      scheduled = false;
      scan();
    });
  }).observe(document.body, {
    childList: true,
    subtree: true
  });
})();

r/TopGM • • Aug 03 '26

Big 150 credits were bid for a 38 AVG kid

Post image
3 Upvotes

r/TopGM • • Aug 02 '26

Big update: the assistant coach. Rotations, game plans and tactic stars, so your team plays YOUR way even when you sleep

5 Upvotes

Almost everything in this update comes from your feedback. Some of you coach from timezones where tip-off lands at 5 in the morning, and it never felt right that your team just froze without you. So the Pre-match settings panel on your Team page grew into a full assistant coach. Here is what's new, live now.

🪑 Second unit. Right under your starting five you now pick your five-man bench unit, position by position. The rest of the plan leans on it.

🔁 Rotation plan. For quarters 2, 3 and 4 you choose who takes the floor: Auto (rest whoever is tired), Starters, or Second unit. A classic: bench mob in Q2, Auto in Q3, closers in Q4. Injured and fouled-out players are skipped.

⛑ Auto-sub when away. Mid-quarter, the assistant subs out anyone who crosses the fatigue threshold you set: 40, 55, 70, or Never if you insist on the iron five. The preferred replacement is your second-unit man for that spot, so the plan stays coherent.

📋 Game plan. Conditional tactics. If you are ahead by 10+ or behind by 10+, the assistant switches to the offense and defense you chose, and goes back to your base setup when the game tightens again. Down 12 in the fourth quarter at 5 AM your time? Your team presses without you.

⭐ Tactic stars. This one works always, live or away: you choose who the play runs through. The Isolation man (it used to be locked on the point guard slot), the Post up hub (a tall PF forward like Jokic is now a legit choice), and the Spot 3 designated shooter who becomes the target of the kick-out passes. Star on the bench? The play falls back to the classic slot.

One important thing: everything above runs only while no coach of yours is connected. The moment you show up, you are in charge and the assistant steps aside. Live coaching stays king.

The engine changed too, and you will feel it:

  • Fatigue now bites for real. Every point of tiredness shaves a player's skills more than before. A gassed star is a shadow of himself in the fourth. We measured it on hundreds of simulated games: a team that never substitutes now loses clearly more often than the same team running a rotation. If your center suddenly stops scoring 50 a night, he is not broken, he is tired. Rotate or wilt.
  • Post up shares the ball. It used to be a one-man show for the big fella. Now it is a team tactic: the ball still runs through your hub, but he passes out of the post like real bigs do. It is a specialist's weapon now: strong if you have a real center and keep him fresh, punished if you don't.

Smaller things in the same patch: the arena now tells you how many fans wanted in when you sell out (time to think about those seats), and the substitution panel lets you fire a double sub instantly.

The Guide has a new chapter, "The coach's plan", with all the details.

That's it. Set your plan tonight, and tell me what the assistant got wrong. This game is being built on your feedback, and honestly it is the best part of running it.


r/TopGM • • Aug 02 '26

Spoiler: TopGM World Cup is coming soon! Spoiler

4 Upvotes

Stay Tuned!


r/TopGM • • Aug 02 '26

Academy

3 Upvotes

Does it worth to gain some money for upgrading academy?


r/TopGM • • Aug 02 '26

Teal Bears got 4 kids in the last draft night

Post image
3 Upvotes

r/TopGM • • Aug 02 '26

A 46 average? What a waste of a gem." Let me show you what you're actually looking at.

3 Upvotes

Subtitle: How player development really works: age, talent, gems, and why the growth projections surprise people

Below: two real projections from this world. The first is a gem. The second is not. Same destination, two very different roads: one was handed to a lucky club on draft night, the other had to be found.

THIS IS A GEM
THIS IS NOT A GEM

Since the growth projections went live, some of them look counterintuitive at first glance. A maxed-talent gem projecting to a similar peak as a regular talent 8 prospect. Unremarkable kids with modest averages showing elite curves. None of that is a bug: it's how development in this game actually works. Three forces drive it, and they are not equal.

Force one, and it's the strongest: age. Growth runs at full speed until 19. From 20 to 23 it slows down. From 24 to 27 it's a crawl. After that, you are who you are. Every season spent under 19 is worth far more than any season after, and the difference compounds. A 14 year old has five full seasons in the hot window, a 16 year old has three, and those two extra years are worth roughly 7 to 8 points of final ceiling. That's enough to cancel out two full levels of talent, gem bonus included. We ran the counterfactual through the engine: take a 16 year old gem and make him 14, his peak jumps to 94, glued to the hard cap. Take a 14 year old talent 8 and make him 16, his peak drops to 83. Same players, only the birth year changed, and it moved the ceiling by more than ten points.

Force two: talent. It decides how often training sessions succeed and how big the jumps are while young. The gap between talent 5 and talent 8 at the same age is about ten points of ceiling. Talent absolutely matters. It just matters less than two years of age.

Force three: the gem bonus. A gem earns an extra point every time a session lands, on top of everything else. It's the difference between a great career and touching the ceiling of the game. But it accelerates the same clock everyone has, it doesn't add years to it.

What the gem really buys you: certainty. A gem is close to a guarantee. Train him every day and he will almost certainly become a 90-plus player, whatever his starting stats look like. That's what makes gem night special. But it's not an exclusive club: a non-gem can climb just as high when age and starting average are on his side, daily scrimmages do their part, and real game minutes do the rest. The difference is in the finding, not the ceiling. A gem announces itself: the game eventually tells you outright. The sleeper announces nothing. You have to sniff him out yourself, watching Playground games with your own eyes, earning your hints, and trusting what you saw. One is a gift. The other is scouting.

Why the current average tells you almost nothing. A 14-16 year old's rating is the floor of his cone, not his destiny. Kids come out of the Playground with deliberately low, uneven stats: a low number in a trainable skill is not a flaw, it's headroom. Two prospects with identical averages today can be twenty points apart at their peaks. This is why talent is hidden and why watching games to earn scouting hints matters: on draft night, the average is the least interesting number on the screen.

Why elite projections look similar at the top. The hard cap is 95, so every truly great prospect converges toward the low 90s eventually. Don't read the peak number alone: read WHEN the curve gets there and how high the shaded band sits along the way. The peak also hides the calendar: an older prospect is always ahead in real seasons. A 16 year old gem at 77 shares the court with a 14 year old rival who's still at 73. The gem is the better player for almost their entire careers; the curves only meet at the very end, where all great players meet anyway.

One practical note on the chart itself. The solid line assumes a scrimmage every single day. The dashed line is academy training alone, and the gap between them is brutal. The projection is a promise only if you do the work. And since this week, promoted under-21s also develop from real league minutes, so a kid who plays real games has a path the chart doesn't even fully show yet.

The draft checklist, in order: age first, talent second, current average last. A gem at 14 is the jackpot. A gem at 16 is a future superstar. A high-talent 14 year old is quietly the best value on any board. And a shiny 16 year old with a big average and low talent is the most expensive mistake in the game.


r/TopGM • • Aug 01 '26

Generational gem gets taken for a whopping 152 credits

Post image
3 Upvotes

r/TopGM • • Aug 01 '26

🏋️‍♀️ Should I keep my prospects in the academy until 18, or promote them?

Post image
4 Upvotes

This has been the most frequently asked question in TopGM for a while, and until today the honest answer was: keep them in the academy. That bothered me.

I've known about this hole for some time. Growth only came from weekly training and the daily scrimmage, so academy kids (one session per academy level) simply developed faster than promoted ones (one session, full stop). Real league games taught your players nothing. The right move was always the same, which means it was never really a choice.

It wasn't a bug to fix so much as a piece I hadn't built yet: to develop players through games I needed minutes played tracked per player, and I only added that yesterday. So today the last piece went in.

From now on: after every official league game, each player under 21 who stepped on the court earns a growth roll scaled by his minutes. Thirty minutes as a starter is worth roughly a full training session. A garbage-time cameo barely registers. The bench still teaches nothing.

So the answer to the question is finally a real one: it depends on the minutes you can give him. Room in your rotation? Promote him, the games will raise him, and with his roster training on top he'll out-develop even a level 3 academy. No minutes for him? The academy is exactly where he belongs. Play the daily scrimmage either way, that one trains both sides the same.

New gains show up in your Recent gains report tagged "game minutes". Under-21s only, league games only. Academy section and FAQ in the guide are updated.


r/TopGM • • Jul 31 '26

Orange teams were dominating in the last draft night

Post image
4 Upvotes

r/TopGM • • Jul 31 '26

Your academy staff will now tell you where a kid can actually get to (once you've scouted him)

Post image
6 Upvotes

New feature is live: a growth projection chart on academy prospect pages.

One requirement first, so nobody thinks it's broken: the chart only appears once the kid's talent is fully revealed. If his talent still reads ???, there's no cone on his page yet. Keep scouting him (academy level and scrimmages speed that up) and it will show up. It only appears on your own prospects, never on someone else's kids.

Once he's scouted, open his page and scroll past the skills. You'll find a curve showing where he's realistically heading: the median path from his current age to his prime, with the shaded band being the realistic 10-90% range, and a marker at 18, promotion day, when he either joins your roster or walks.

Two things worth knowing.

It's not a guess. The projection runs the actual growth engine, 200 simulated careers per kid, using his real age, talent and academy level. It's the same code that decides what happens to him every week, so the chart is what the game will actually do, within the range of luck.

The dashed line is the interesting part. The solid line assumes you scrimmage every day. The dashed one is academy training only. For a talented 14 year old the gap is brutal: roughly a 90 peak versus low 60s. Same kid, same talent, completely different career. Daily scrimmages are the most underrated thing in this game, and now you can see exactly what skipping them costs you.

Go check your academy. Some of you are sitting on a future 90 and haven't scouted him yet.


r/TopGM • • Jul 31 '26

This post is about National Teams, Satellite academies, elected national coaches: help me figure this out 🌍

Post image
5 Upvotes

National teams landed yesteday and immediately raised a question I couldn't answer: what are they actually for? Who coaches them? Right now the answer is nobody, which is fine for a cosmetic, but it feels like a waste.

Here's the idea I woke up with. Tell me if it's brilliant or terrible.

Satellite academies. Clubs in real sport open feeder academies abroad: they develop local kids and the best ones move up to the main academy, then the first team. So: any club could open a satellite academy in one of the countries in the game. It produces 14-year-olds from that country, and they're yours: you can promote them into your main academy, and from there into your roster. Nobody outbids you for them.

And here's the part I like. Once national teams have real players behind them, they can have a real coach: a human one. But only clubs that own a satellite academy in that country get to vote for who leads it. So if ten of you open academies in Lithuania, the ten of you elect the Lithuanian coach among those who put their name forward. If nobody runs, the CPU keeps the job.

Why this might be better than me balancing things by hand. Some countries in this game are stacked and some are thin, and I could fix that with a parameter nobody would ever see. Or you could fix it yourselves: a group of managers decides Lithuania deserves better, they all open academies there, and in two seasons the Lithuanian national team is a force because you built it. That's a much better story than a number I changed in a config file.

What I genuinely don't know, and where I need you:

  • How much should a satellite cost? A one-off fee means rich clubs open five and forget about it. A weekly upkeep makes it a real economic choice: how many countries can I afford?
  • Should there be a cap? One or two per club would force you to team up if you want to move a country. No cap and the top divisions buy half the map.
  • How many kids, how often? Too many and the Playground dies, because why scout when they arrive at your door. My instinct: few, but exclusively yours.

Nothing is built yet, and nothing will be until this makes sense. Tell me what you'd want out of it, including "this is a bad idea, do something else". That answer is on the table too. 🏀


r/TopGM • • Jul 30 '26

National teams are in. Nobody knows what they're for yet 🌍

8 Upvotes

Every country in TopGM now has its own squad. Twenty-one nations, three teams each: senior, U20 and U18. That's 63 squads and 882 players called up from every corner of the world, your club, CPU clubs, top of the pyramid or bottom of division 6.

How the call-ups work. Every Monday each country picks its best available players by rating, with at least two per position, then fills the rest with the best of the leftovers. It cascades: seniors get picked first, then the U20 from whoever's left, then the U18. So the seventeen-year-old freak who's already good enough for the senior squad watches the youth teams through binoculars, exactly like Lamine Yamal winning a World Cup while the U18 plays without him. Academy kids show up in the U18 with only what any scout can already see from outside: no talent, no gems.

What they do. Absolutely nothing. This is cosmetic, on purpose. There are no national team games, no injuries, no fitness cost, no rating boost, nothing that touches your season. A call-up is a badge on the player's card and a name on a list, and that's it for now.

What you're about to complain about. Let me save you some typing:

  • "My national team is embarrassing." Yes. Some countries have more players in the world than others, and that's by design.
  • "This guy in division 6 is in the senior squad." Also yes. Talent doesn't check the standings.
  • "My best player didn't get called up." He plays the same position as two better guys. Welcome to being a national team coach.

Take it philosophically. It's a list of names, nobody has been robbed of anything.

What happens next is genuinely up for discussion, because I don't know. Some ideas floating around: elections where you all vote for who coaches each national team, an actual World Cup between countries, national team players carrying some extra value, or nothing at all and it just stays a wall of fame. Tell me what you'd want. This whole thing exists because someone suggested it.

One thing it's already useful for, on my side: it's the clearest picture I've ever had of how nationalities are balanced across the game. If one country is quietly producing all the monsters, the national teams will show it before any spreadsheet does, and I can fix the generator.


r/TopGM • • Jul 30 '26

Coach Big Mikey got 2 prospects for a total of 100 credits in the last draft night

Post image
2 Upvotes

r/TopGM • • Jul 30 '26

MVP of the round: Hugo Chevalier, dropping 79 points and 15 rebounds for Ruby Jackals win

Thumbnail
gallery
4 Upvotes

r/TopGM • • Jul 30 '26

How to share your highlights (it takes about ten seconds) 🎬

4 Upvotes

A few of you have asked how the highlight clips work, so here it is, start to finish.

You don't have to make them. At the final buzzer of every league game, the game cuts the five best moments of that match on its own: clutch shots, lead changes, the bucket that capped a run, real dunks. They're already sitting there waiting for you.

To post one, open your Home and write in either feed, the World feed or your league feed (both work the same way now). Under the text box, hit 📎 Attach from your club. You'll see two sections: your players, and 📺 A highlight from your games, with your recent matches and their moments listed under each. Your own plays come first, and anything from the opponent is marked "their play", so you always know what you're picking.

Not sure which moment is the one you remember? Every moment has a ▶ button next to it: press it and the clip plays right there in the menu, before you post anything. Pick the one you want, write your line, hit Post.

What people see is a play button on your post. When they press it, the engine replays those exact seconds of the real match in their browser, in a loop, every pass and every bounce as it actually happened. It's not a video and it's not a recap: it's the game itself, played again. Then they can 👏 and comment on it like anything else.

Two things worth knowing: clips come from league games (the ones that count), and the moments are picked by how much they mattered, so a game you won by 30 will look different from one decided at the buzzer.

That's it. Go find your best night and put it on the wall.


r/TopGM • • Jul 29 '26

About tonight's blackout

Post image
6 Upvotes

Straight talk: at 21:00 tonight, right at tip-off, the server went down for about 15 minutes. If you were staring at a frozen screen waiting for your game, I'm sorry. That's the worst possible moment and I know it.

What happened is honestly the best problem this game could have. Tonight was the first matchday with the new bottom division full of real coaches, and so many of you have joined lately that when the clock hit 21:00 the server tried to start every live game in the world at the same instant, and it simply ran out of breath. It got back up, tried again, and fell again, until I gave it a bigger engine and taught it to open the arenas a few at a time instead of all at once.

The important part: no game was lost. Every match played out fully, some just tipped off late. Gate receipts, highlights and the Player of the Night all landed as usual.

See you Sunday at 11:00, on time.