FM27 (27.0.0+2486695) career save: section schema changes vs FM26 (values-free probe)

Open
#31 17 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
35/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
python
Domain
backend

Research direction

Start with the FM26 container and section parsing code, then inspect existing tests or fixtures for schema versions and missing sections. Use the reported values-free probe as the compatibility checklist; the issue does not name specific files or tests. Done means determining which FM27 changes the parser must support and validating them against an FM27 save or equivalent tests.

Written by the indexing model from the issue text.

Description

Hi, and thanks for fmsave. We use it to read FM26 saves, and we wanted to share what we're seeing on FM27 in case it's useful.

We ran a layout probe on a real FM27 career save, build 27.0.0+2486695 (Launch Preview, career start). The probe compares section heads and schema versions against FM26. It never decodes any player, club, fixture or finance values.

Summary

  • The container opens with the FM26 container code.
  • The game_db schema is unchanged (4000).
  • Sections with a changed schema version: backroom_advice_manager, edit_session_man, game_info, humans, media_man, network_man, news, person_db_changes, player_stats_hist_dt, regeneration_manager, save_game_summary, starting_club_debt_db, team_talk_man, training_man.
  • Sections missing compared with FM26: award_club_hist_dt, extended_comp_records_dt, non_pl_hist_dt, pl_hist_dt, tc_best_eleven_history_dt, tc_extended_club_records_history_dt, tc_extended_nation_records_history_dt.
  • An unnamed span region is present.

We're happy to run any probe or test build you'd like against this save and report back. We can't share the save file itself, because it belongs to a player.

Per-section schema versions (values-free)
{"agent_manager": {"schema": 2, "status": "schema_same"}, "award_club_hist_dt": {"schema": 1, "status": "section_missing"}, "award_club_hist_ls": {"schema": 4, "status": "schema_same"}, "award_man": {"schema": 13, "status": "schema_same"}, "award_year_hist_dt": {"schema": 1, "status": "schema_same"}, "award_year_hist_ls": {"schema": 4, "status": "schema_same"}, "awol": {"schema": 1, "status": "schema_same"}, "backroom_advice_manager": {"schema": 20, "status": "schema_changed"}, "board_takeover_manager": {"schema": 5, "status": "schema_same"}, "captain_system": {"schema": 8, "status": "schema_same"}, "comp_history_dt": {"schema": 3, "status": "schema_same"}, "contract_man": {"schema": 14, "status": "schema_same"}, "database_analyser": {"schema": 2, "status": "schema_same"}, "dispute": {"schema": 1, "status": "schema_same"}, "dynamics_pivotal_moments": {"schema": 3, "status": "schema_same"}, "edit_session_man": {"schema": 176, "status": "schema_changed"}, "extended_comp_records_dt": {"schema": 5, "status": "section_missing"}, "feeder_man": {"schema": 5, "status": "schema_same"}, "finance_manager": {"schema": 17, "status": "schema_same"}, "financial_fair_play_manager": {"schema": 2, "status": "schema_same"}, "fine_manager": {"schema": 1, "status": "schema_same"}, "fog_of_war": {"schema": 2, "status": "schema_same"}, "game_db": {"schema": 4000, "status": "schema_same"}, "game_info": {"schema": 47, "status": "schema_changed"}, "hall_of_fame": {"schema": 10, "status": "schema_same"}, "humans": {"schema": 24, "status": "schema_changed"}, "injury_histories_dt": {"schema": 2, "status": "schema_same"}, "injury_histories_ls": {"schema": 4, "status": "schema_same"}, "injury_manager": {"schema": 8, "status": "schema_same"}, "interaction_manager": {"schema": 47, "status": "schema_same"}, "job_centre": {"schema": 1, "status": "schema_same"}, "manager_manager": {"schema": 35, "status": "schema_same"}, "match_stats_cfg": {"schema": 6, "status": "schema_same"}, "matchday_manager": {"schema": 8, "status": "schema_same"}, "media_man": {"schema": 20, "status": "schema_changed"}, "memory_pools": {"schema": 0, "status": "schema_same"}, "morale_manager": {"schema": 4, "status": "schema_same"}, "network_man": {"schema": 25, "status": "schema_changed"}, "news": {"schema": 2957, "status": "schema_changed"}, "non_pl_hist_dt": {"schema": 3, "status": "section_missing"}, "non_pl_hist_ls": {"schema": 4, "status": "schema_same"}, "official_manager": {"schema": 5, "status": "schema_same"}, "person_db_changes": {"schema": 3754, "status": "schema_changed"}, "person_record_history_dt": {"schema": 2, "status": "schema_same"}, "person_record_history_ls": {"schema": 4, "status": "schema_same"}, "person_record_manager": {"schema": 30, "status": "schema_same"}, "pl_hist_dt": {"schema": 3, "status": "section_missing"}, "pl_hist_ls": {"schema": 4, "status": "schema_same"}, "play_fixture_manager": {"schema": 7, "status": "schema_same"}, "player_stats_hist_dt": {"schema": 7, "status": "schema_changed"}, "press_conference_manager": {"schema": 10, "status": "schema_same"}, "regeneration_manager": {"schema": 47, "status": "schema_changed"}, "retirement_manager": {"schema": 2, "status": "schema_same"}, "save_game_summary": {"schema": 31, "status": "schema_changed"}, "scout_man": {"schema": 31, "status": "schema_same"}, "shortlist_man": {"schema": 50, "status": "schema_same"}, "sim_stats": {"schema": 1, "status": "schema_same"}, "starting_club_debt_db": {"schema": 3754, "status": "schema_changed"}, "tactics_man": {"schema": 26, "status": "schema_same"}, "tc_best_eleven_history_dt": {"schema": 2, "status": "section_missing"}, "tc_best_eleven_history_ls": {"schema": 4, "status": "schema_same"}, "tc_cup_history_dt": {"schema": 1, "status": "schema_same"}, "tc_cup_history_ls": {"schema": 4, "status": "schema_same"}, "tc_extended_club_records_history_dt": {"schema": 5, "status": "section_missing"}, "tc_extended_club_records_history_ls": {"schema": 4, "status": "schema_same"}, "tc_extended_nation_records_history_dt": {"schema": 5, "status": "section_missing"}, "tc_extended_nation_records_history_ls": {"schema": 4, "status": "schema_same"}, "tc_history_dt": {"schema": 1, "status": "schema_same"}, "tc_history_ls": {"schema": 4, "status": "schema_same"}, "tc_league_history_dt": {"schema": 1, "status": "schema_same"}, "tc_league_history_ls": {"schema": 4, "status": "schema_same"}, "tc_manager_history_dt": {"schema": 2, "status": "schema_same"}, "tc_manager_history_ls": {"schema": 4, "status": "schema_same"}, "tc_record_man": {"schema": 24, "status": "schema_same"}, "team_talk_man": {"schema": 5, "status": "schema_changed"}, "trade_man": {"schema": 11, "status": "schema_same"}, "training_camp_man": {"schema": 1, "status": "schema_same"}, "training_man": {"schema": 32, "status": "schema_changed"}, "transfer_man": {"schema": 35, "status": "schema_same"}, "used_player_data": {"schema": 35, "status": "schema_same"}, "virtual_manager": {"schema": 1, "status": "schema_same"}, "weather_manager": {"schema": 3, "status": "schema_same"}}
Dominant language
Python
Stars
28
Forks
8
Avg merge
42m
Merged PRs (30d)
33

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from rhiever/fmsave

All issues in rhiever/fmsave

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.