How I Fixed Baseball Sim Prospect Development Breaks

Scouting or understanding the talent of a player in a computer sim is really the point of the game when you get down to it. In most games, there's not a lot of mystery between who is good and who isn't. The ratings are splayed out in front of you. Because the engine knows who is good, there are lots of ways to gamify how the game hides it from itself, otherwise you're playing against a computer that can never lose.

I've been wondering for a while if it were possible to change how prospect talent gets designed into a game, so that there's both a fog of war meaning you could just pick the wrong player despite the measurables looking good and replicating the real-world deal where someone looks great on paper and just busts. Using the lessons I learned from my team chemistry work in past iterations, this was another one of those areas where I think text sims optimize for the wrong things.

In sims like Out of the Park Baseball, I don't even use the in-game scouting system, preferring instead to just see ratings up-front. In recent years, I've played where I mostly hide overall ratings and only see potential and let stats dictate how good someone is at developing. You can use the in-game scouting model, but stats in OOTP for HS/college players don't really tell you much, and the fog of war in the game I've always found to be a little disconnected from how players really develop. In OOTP, the only way to have a "late bloomer" happen is literal dice-rolls via something called "talent change randomness" which will diminish some players and bolster others. It's great for getting you 14th rounders who become useful players, but it's extremely inconsistent and it feels unrealistic to me.

In O27, when it came time to model college baseball — I have a less-developed youth sim in the game too, but it's not great — I decided I wanted a model that did several things.

First, I wanted to be able to model the "dominant player in our class but not going to be a star" player who because their ratings bloom higher than their peers, looks like an elite player. Someone who is a 55/55 player and has the full weight of their potential already when their peers are in the 20s and 30s is going to look elite, even if those peers are 30/60 or 35/73 potential players.

Second, I needed a way to take the "talent change randomness" and instead bake a more "developed player like in college" model that essentially grants that everyone is growing, improving and competing. That means there's no regression for my college players, it's just how and who develops changes based on an internal metric assigned to the player from the start of their career.

This led me to three connected mechanics working together: a potential-vs-access split, an interest-rate development model, and a scouting fog layer.

Three Layers: Potential, Access, Display

Every college player carries three nested grade systems per attribute:

┌────────────┬──────────────────────┬────────┬──────────────┐
│ Grade Type │ What It Is │ Hidden │ Changes │
├────────────┼──────────────────────┼────────┼──────────────┤
│ potential │ True ceiling (20-80) │ Yes │ Grows yearly │
│ access │ Lens multiplier │ Yes │ Fixed at │
│ │ (0.40-0.95) │ │ generation │
│ displayed │ What shows in box │ No │ Refreshes │
│ │ scores │ │ yearly │
└────────────┴──────────────────────┴────────┴──────────────┘

The formula is simple: displayed = round(potential × access)

So a player with potential 62 and access 0.42 displays as 26. That displayed grade goes into the box score. The engine plays the displayed grade. Four college years later, if their potential has grown to 79 but their access is still 0.42, they display as 33. They still look like a fringe contributor despite their ceiling being 79.

The key move is that access is static. A hidden gem with low access stays hidden their entire college career. Only on pro signing does the lens drop and you see what they actually are.

This solves the first problem. A dominant player in the recruiting class displays as 55 because they have high access to their actual ceiling. They look elite because they are accessing most of their potential right now. Their peers with lower access and higher ceilings look mediocre. On draft day, everyone loves the 55 kid. When he signs and plays at 55 in the pro engine, he's just a solid contributor. His peers who finally access their full potential become the stars.

The Development Model: Interest Rates

This is where the "talent change randomness" problem gets solved. Each player draws an interest_rate_percent value one time at generation. This rate is static for their entire college career. It drives yearly potential growth via this formula:

raw_gain = (interest_rate / 100) × P_current
cap_base = C_MAX × (1 - (P - P_MIN) / (P_MAX - P_MIN))
cap_effective = int(cap_base × tier_multiplier)
gain = min(raw_gain, cap_effective)
P_new = P + gain

The cap formula does the work. Lower-potential players have larger yearly caps. Someone at potential 30 can gain up to 20 points. Someone at potential 70 gains only 4. This creates natural ceiling pressure while letting players climb.

The tier multiplier, based on the interest rate, amplifies this pattern across three tiers:

┌──────────────────────┬──────────────────────┬────────────┬───────────────┐
│ Interest Rate Range │ Tier │ Multiplier │ Distribution │
├──────────────────────┼──────────────────────┼────────────┼───────────────┤
│ 0-100% │ 1 (ordinary │ 1.0× │ 75% of class │
│ │ developer) │ │ │
├──────────────────────┼──────────────────────┼────────────┼───────────────┤
│ 101-200% │ 2 (late bloomer) │ 1.3× │ 20% of class │
├──────────────────────┼──────────────────────┼────────────┼───────────────┤
│ 201-320% │ 3 (super-bloomer) │ 1.6× │ 5% of class │
└──────────────────────┴──────────────────────┴────────────┴───────────────┘

Two players with the same starting potential but different interest rates trace completely different paths:

┌────────────┬──────────────────────┬────────┬────────┬────────┬────────┐
│ Starting P │ Interest Rate │ Year 1 │ Year 2 │ Year 3 │ Year 4 │
├────────────┼──────────────────────┼────────┼────────┼────────┼────────┤
│ 30 │ 214% (super-bloomer) │ 30 │ 50 │ 62 │ 70 │
├────────────┼──────────────────────┼────────┼────────┼────────┼────────┤
│ 30 │ 80% (ordinary) │ 30 │ 32 │ 34 │ 36 │
├────────────┼──────────────────────┼────────┼────────┼────────┼────────┤
│ 60 │ 80% (ordinary) │ 60 │ 65 │ 69 │ 73 │
└────────────┴──────────────────────┴────────┴────────┴────────┴────────┘

Both kids are always improving. Both follow a deterministic path. The variation comes from their inherent development rate, assigned at generation.

This isn't random talent change. This is character. When a player surprises you, it's because you didn't know their development rate, not because the universe rerolled them mid-career.

The Decision Triangle: Stats, Reports, Your Judgment

But here's the catch: you don't see the interest rate. You don't see potential. You see college stats and two independent scouting reports.

The stats show what a player can do right now, constrained by their access lens. A player displaying as 26 who plays in the stat line will look like a fringe contributor.

The two scouting reports try to project the ceiling. The shared scouting service report that everyone reads gets blurred by a per-player fog magnitude (drawn once, Uniform 7-31). Your own scouting department generates an independent report, also blurred by the same fog magnitude but drawn separately.

Both reports blur the true potential by ±fog and get clamped to the 20-80 range. So a kid with true potential 79 and fog magnitude 24 might report as:

┌──────────────────┬───────────────────────────────────┐
│ Source │ Report │
├──────────────────┼───────────────────────────────────┤
│ Shared service │ 55 (potential blurred downward) │
├──────────────────┼───────────────────────────────────┤
│ Your department │ 82 (potential blurred upward) │
└──────────────────┴───────────────────────────────────┘

The scouts disagree by 27 points. The college stats say this kid is mediocre. So you triangulate.

The stats show what he can do with his current access. The scouts are trying to project his ceiling. Your scouts disagree wildly. You have to decide: is the disagreement a signal that he's a hidden gem? Or are both scouts just wrong? Is your department seeing something real, or chasing wishful thinking?

This creates three different decision scenarios:

Hidden Gem: Kid has mediocre stats, both scouts agree he's elite. The visible evidence doesn't match the projection. Do you believe the scouts or trust the stats?

College Legend: Kid has elite stats, both scouts agree on the ceiling. The stats and scouts reinforce each other. Does the agreement mean he's a consensus pick, or a consensus trap that everyone overvalues?

Stat Monster: Kid has great stats, but scouts are worried. The scouts see something the stats don't reveal. Do they know something real or are they overthinking?

In each case, the game isn't the sim itself. It's your choice about who to trust and what to believe about the player underneath the numbers.

The Reveal: College to Pro

When a college player signs to the pro side, the engine sees the full potential. The hidden gem who displayed as 26 all four years now plays at 79. The "college legend" with 45 potential who displayed as 43 and had great stats now plays at 45 and is a solid contributor at best.

The college career stats stay attached to the pro player card. A permanent record of what he looked like versus what he actually was.

Why This Works

The whole system solves the original problems simultaneously.

The "dominant player in our class but not elite" problem gets solved because display decouples from potential. He looks great because his access is high, showing most of his actual ceiling right now. His peers with lower access and higher potential ceilings look mediocre in the stat line. Then over four years his potential grows while theirs climbs faster. On draft day everyone loves him, but in the majors, he's a role player.

Late bloomer modeling becomes deterministic instead of random because you assign every player a development rate upfront. No mid-career rerolls. The variation is purely in the slope. A super-bloomer traces a dramatic arc from 30 to 76. An ordinary developer at 30 potential traces 30 to 37.

And you get a bonus: scouting becomes a real decision space. You're not reading ratings off a sheet. You're weighing two independent noisy sources. You're using stats to calibrate the reports. You're deciding whether to trust your department or the consensus.

Nobody regresses. Everyone develops. The mystery is in who develops fast and how much they can hide it while getting there.