Technical dossier · Method · 2026 edition

How the football career simulator works

Nuovo Goat turns one full season into a compact, reproducible report. The engine is fictional, transparent about its limits and designed for fast player careers.

A seeded career, not a fixed script

Creation produces a seed and an internal random state. Each season consumes that state in a fixed order, so the same save and choice generate the same outcome. This makes the engine testable without making every career identical.

Playing time and performance

Position, player OVR, club strength, age and difficulty affect selection. Appearances create opportunities for goals, assists and clean sheets; rating then combines output, level and controlled variation. Goalkeepers, defenders, creators and strikers therefore produce different careers.

League, cups and continental football

Every season calculates a fictional league table and domestic cup. Qualification can unlock a continental competition next year. Strong clubs have an advantage, but player impact and seeded variance can still produce surprises.

Growth, decline and injuries

Young players usually have the largest development window. Minutes, form, talent and difficulty shape growth; injuries reduce availability and can slow progress. After the athletic peak, the age curve turns negative and retirement becomes increasingly likely.

Contracts, transfers and retirement

Expiring deals and standout seasons can open the market. A renewal keeps continuity; a transfer changes league, club strength and the next contract. The career ends automatically at the age/decline boundary or manually from age 30, then the GOAT score freezes the final verdict.

What the model does not claim

This is not a forecast of real football. Club and competition names are fictional, ratings are internal game values, and no official crest or player database is used. The model aims for a readable career narrative, not scouting advice.

From the dossier to the first state

The registration form stores a display name, nationality, position, starting age, difficulty, league and fictional club. Those choices are converted into a starting OVR, potential, contract, market value and seeded random state. The public interface localises labels, but the saved IDs stay stable so the same career can be opened in Italian, English or Spanish without rewriting its history.

Starting age changes the available development window. A 14-year-old academy player has more seasons before the athletic peak but normally begins further from a strong first team. A 20-year-old professional starts closer to immediate contribution but has less time to turn potential into peak OVR. Difficulty adjusts how forgiving the selection, growth and injury environment is.

How playing time is estimated

The engine first compares the player with the club context. OVR relative to team strength matters, as do age, position, difficulty and form. The result is an availability and selection profile rather than a promise of a fixed number of matches. An elite club can still be the wrong first contract for a raw prospect because the squad threshold is higher.

Injuries reduce the pool of available matches before attacking statistics are produced. This order matters: a forward cannot score in fixtures he missed, and a talented substitute cannot accumulate the same season totals as an equally talented regular starter. The report therefore shows appearances before goals and assists.

How positions produce different statistics

Each role uses a different production profile. Strikers and wide attackers receive more goal opportunities; attacking and central midfielders receive more assist opportunities; defenders and goalkeepers gain more value from clean-sheet context, rating and team results. The model does not force identical totals merely to make every position look equal.

Player level and season form modify those baselines. A high-OVR defender can still score occasionally, and a struggling striker can finish with few goals. The important constraint is that the output remains plausible for the selected role across a long career, not that a single season matches a real-world statistical distribution.

Rating, OVR and potential describe different things

Average rating describes what happened in the current season. OVR represents the player level carried into future simulations. Potential is the remaining ceiling, not a guaranteed destination. A good rating and regular minutes help growth, while age, injuries and difficulty can slow it. The three values can therefore move in different directions.

For example, a young player can record a modest 6.7 rating, still gain OVR through minutes and remain far below potential. A veteran can produce a useful rating while losing OVR because the age curve has turned negative. Reading only one number hides the career logic.

How league and cup outcomes are composed

A fictional league table is built for every season using club strength, controlled variation and player contribution. The report keeps the player club near its actual finishing position and shows a readable top slice of the table. Domestic cup progress is simulated separately, so a club can underperform in the league and still make a deep cup run.

Continental competition depends on prior qualification. A strong league finish or relevant trophy can open the next campaign; failing to qualify produces an explicit no-continental-competition line rather than silently omitting the event. This creates continuity between seasons without requiring a match-by-match calendar.

Growth is bounded by age and potential

Development is strongest when the player is young, has room below potential and receives useful minutes. Form and difficulty adjust that opportunity. Growth is capped so one extraordinary season cannot jump through the entire rating scale, and the player cannot keep improving indefinitely above the stored potential.

Later in the career, the same calculation begins to include decline. The change is gradual rather than a single retirement cliff. Peak OVR is preserved separately, which means the final GOAT score remembers the highest level even after the current OVR falls.

What an injury changes

An injury is not decorative timeline copy. It removes matches from availability and can reduce both season production and development. A serious muscle injury costs more fixtures than a shorter stop. The report names the injury and missed-match count so the lower totals have an explanation.

The engine still allows healthy seasons, and it does not create a medical model or claim to predict real injury risk. The feature exists to make availability uncertain and to create trade-offs across long careers, especially as the player becomes older.

When contract and transfer choices appear

Contract expiry always creates a decision. A strong season may also attract market interest. Renewal keeps the current club and sets a new term; a transfer changes league, club strength and contract length. Because the random state is deterministic, choosing a different option is a genuine branch rather than a cosmetic label placed on the same future.

The game saves as soon as the option is selected. That prevents a refresh from losing the move and makes the next season start with the correct employer. The timeline records renewals and transfers so the final archive explains where the player spent each phase.

Save integrity and reproducible testing

Every local slot uses a versioned data envelope. The reader validates the basic career shape, migrates supported older versions and isolates malformed JSON. A broken slot can be deleted without touching the other two. This is important for a game that may remain in the browser for many seasons.

The engine functions accept a seed and return a new state without mutating the input. Automated tests cover identical-seed results, growth and decline, season simulation, contract decisions, save migration, corrupt-save recovery, retirement and scoring. Determinism is therefore both a game rule and an engineering property.