{"slug": "getting-claude-to-extract-data-from-a-1997-football-manager-game", "title": "Getting Claude to extract data from a 1997 football manager game", "summary": "A developer successfully extracted player, team, and stadium data from the 1997 video game FIFA Soccer Manager 97 using the AI tool Claude. The project produced a searchable website and CSV files containing the game's data, including unused content like full player names and manager information. The code and extracted data are now publicly available on GitHub, enabling others to replicate the process without AI assistance.", "body_md": "There's a football manager game I got for my birthday when I was nine years old: [FIFA Soccer\nManager](https://www.mobygames.com/game/6314/fifa-soccer-manager/)\n97. I spent countless hours playing it as a child, trying to win the league, the cup or just avoid\ngetting the sack! Two years later I got a newer manager game with better graphics and more complex\ngameplay but it ran incredibly slow and I didn't enjoy playing it at all, so I stuck with the 1997\none.\n\nEvery couple of years I get it out again and spend an evening basking in nostalgia and reliving the experience. Originally it was made for Windows 95, and it was still working on Windows until (I think) Windows 10. But it works perfectly well in Wine on Linux, so I can still play it today. It just has a teeny tiny resolution and looks silly on my 42\" monitor.\n\nI wondered if I could get [Claude](https://claude.ai) to extract data from the game files. I pointed\nit at the directory my Wine installation installed to. I told it I was only interested in players,\nteams, stadiums and that kind of thing - the stuff that maps to the real world of football rather\nthan internal game data. It found everything in the file `SM97.DAT`\n\nand was very quickly able to\nanswer simple questions like which is the biggest stadium or who is the best rated player.\n\nI asked it to make an HTML page summarising all the data. It produced this:\n[https://files.bennuttall.com/fsm97/](https://files.bennuttall.com/fsm97/)\n\nI asked it to create CSV files of all the data it found, so I could make sense of it and make sure it looked right. There were a few issues with it messing up the data but it was easily able to fix it. It didn't know what all the column names for the player stats were, so I launched the game and wrote them all down along with David Seaman's stats so it could calibrate. I expanded the scope to all players and clubs, not just the English leagues.\n\nOnce I was happy with the CSV files, all future queries would be scripted against these files so I could be sure it was coming from extracted data and not extracting from the game data again or even hallucinating. I then asked for a more comprehensive website of all the data, with lots of interlinking. I was really impressed with what it put together, and I spent some time diving deeper into the data and making tweaks to the website.\n\nI wanted to produce a set of Python code to make this process reproducible, so if anyone else wanted\nto do it they could do so without needing an AI tool of their own. It's now on\n[GitHub](https://github.com/bennuttall/fsm-97-data), and I've published the website too:\n[fsm.bennuttall.com](https://fsm.bennuttall.com/)\n\nI've worked with Claude to fine-tune the way the website works, trying to interlink everything and make it easy to find what you're looking for, or explore the data looking for interesting things.\n\n## Stats, trivia and EA All Stars\n\nI always found it annoying that it only ever used short versions of team names like \"Sheffield W\"\ninstead of \"[Sheffield Wednesday](https://fsm.bennuttall.com/clubs/sheffield-wednesday/)\",\npurely to keep the strings short enough to use everywhere. I had Claude correct them to their proper\ntitles. Stadium names are not used in the game, but they all exist in the game data, albeit with odd\nmistakes sometimes, like \"[Bramall Lane\nGround](https://fsm.bennuttall.com/stadiums/bramall-lane/)\". I corrected those too. Some more\nobscure club or stadium names were just wrong so I fixed those too. I didn't want to mess with too\nmuch of the game data, but felt these changes were reasonable.\n\nOne thing I found interesting was that there's data in there that isn't used in the game at all.\nPlayers go by first initial and Surname, like \"D. Beckham\", but the data has \"[David\nBeckham](https://fsm.bennuttall.com/clubs/manchester-united/#david-beckham)\". It has all the\nmanager names of all English leagues and a few others, but they're never used in game. Same for club\nnicknames and stadium names (and sometimes town/city and even first line of address!).\n\nThis revealed oddities like P. Shilton in the game actually being former England goalkeeper [Peter\nShilton](https://fsm.bennuttall.com/clubs/leyton-orient/#peter-shilton), who really did play for\n[Leyton Orient](https://fsm.bennuttall.com/clubs/leyton-orient/) until 1997, at the age of 47;\nand oddly, Olympic decathlon champion [Daley\nThompson](https://fsm.bennuttall.com/clubs/mansfield-town/#daley-thompson) at [Mansfield\nTown](https://fsm.bennuttall.com/clubs/mansfield-town/) (an easter egg).\n\nI didn't realise there were some clubs that shared stadiums, which is reflected in the game. I\nwonder if you managed [Wimbledon](https://fsm.bennuttall.com/clubs/wimbledon/) and expanded the\nstadium ([Selhurst Park](https://fsm.bennuttall.com/stadiums/selhurst-park/)), if you played against\n[Crystal Palace](https://fsm.bennuttall.com/clubs/crystal-palace/) away, would you see the ground at\nits default appearance or would you in fact see your own upgraded home stadium? (The Reddit\ncommunity confirms they do appear as different stadiums!)\n\nI made sure the extracted data was aware of the concept of shared stadiums, and it also picked up on the fact that some of the clubs' managers were also listed as players for the same club - a once popular \"player-manager\" role.\n\nI put together a few special pages showing some interesting stats, such as [top rated\nplayers](https://fsm.bennuttall.com/stats/top-players/), [top 10 best players in each age\ngroup](https://fsm.bennuttall.com/stats/age-groups/), [top rated\nplayer-managers](https://fsm.bennuttall.com/stats/player-managers/) and [stadiums by\ncapacity](https://fsm.bennuttall.com/stats/stadiums/).\n\nOne thing that stands out in top player stats is a set of highly rated players from a club called\n\"[EA All Stars](https://fsm.bennuttall.com/clubs/ea-all-stars/)\". None of these are real players —\nthey're actually the game developers and other staff who worked on the game. The Assistant Producer\n[Mark Bergan](https://fsm.bennuttall.com/clubs/ea-all-stars/#mark-bergan) made himself one of the\nbest rated players in the whole game, rated as highly as [David\nSeaman](https://fsm.bennuttall.com/clubs/arsenal/#david-seaman), [George\nWeah](https://fsm.bennuttall.com/clubs/ac-milan/#george-weah) and\n[Romario](https://fsm.bennuttall.com/clubs/spare/#unknown-romario).\n\n## Data extraction method\n\nThe [data extraction method](https://github.com/bennuttall/fsm-97-data/blob/main/data-extraction.md)\nis explained in detail on GitHub. Here's an example:\n\nDavid Seaman is the first player record in Arsenal's block. His raw 87 bytes:\n\n```\n 0:  44 61 76 69 64 00 00 00 00 00 00 00 00 00 00 00   David...........\n16:  00 00 00 00 00 00 00 00 53 65 61 6d 61 6e 00 00   ........Seaman..\n32:  00 00 00 00 00 00 00 00 00 00 00 1a 00 00 01 48   ...............H\n48:  5e 46 47 4a 48 10 48 19 2f 1a 57 5d 2c 2a 18 57   ^FGJH.H./.W],*.W\n64:  57 5f 1d 50 58 40 23 00 00 50 b6 52 01 e9 5a 04   W_.PX@#..P.R..Z.\n80:  04 01 ff 8a 05 00 00                               .......\n```\n\n### Names\n\n| Bytes | Hex | Value |\n|---|---|---|\n| [0:6] | `44 61 76 69 64 00` |\n`David` |\n| [24:30] | `53 65 61 6d 61 6e 00` |\n`Seaman` |\n\n### Stats block (starting at byte 42)\n\n```\nByte 42+1  = 0x1a = 26   → nationality index 26 (England)\nByte 42+2  = 0x00 =  0   → position GK\nByte 42+4  = 0x01 =  1   → shirt number 1\n```\n\n### Skills (stats[5:28] = bytes 47–69)\n\n```\n48 5e 46 47 4a 48 10 48 19 2f 1a 57 5d 2c 2a 18 57 57 5f 1d 50 58 40\n```\n\n| Attribute | Hex | Value |\n|---|---|---|\n| Speed | `48` |\n72 |\n| Agility | `5e` |\n94 |\n| Acceleration | `46` |\n70 |\n| Stamina | `47` |\n71 |\n| Strength | `4a` |\n74 |\n| Fitness | `48` |\n72 |\n| Shooting | `10` |\n16 |\n| Passing | `48` |\n72 |\n| Heading | `19` |\n25 |\n| Control | `2f` |\n47 |\n| Dribbling | `1a` |\n26 |\n| Coolness | `57` |\n87 |\n| Awareness | `5d` |\n93 |\n| Tackling Det. | `2c` |\n44 |\n| Tackling Skill | `2a` |\n42 |\n| Flair | `18` |\n24 |\n| GK Kick | `57` |\n87 |\n| GK Throw | `57` |\n87 |\n| GK Handling | `5f` |\n95 |\n| Throw-in | `1d` |\n29 |\n| Leadership | `50` |\n80 |\n| Consistency | `58` |\n88 |\n| Determination | `40` |\n64 |\n\n### Remaining stats\n\n```\nstats[28] = 0x23 = 35   → Greed\nstats[30] = 0x00 =  0   → Form\nstats[31] = 0x50 = 80   → Energy\nstats[35] = 0xe9 = 233  ⎤\nstats[36] = 0x5a =  90  ⎦ → 233 + 90×256 = 23273 days → 1963-09-19 (DOB)\n```\n\nAge on 29 July 1996: **32**.\n\n## The 2079 Bug\n\nI'd read on the [thriving Reddit community](https://www.reddit.com/r/fisom/) for this game about the\n\"2079 bug\". Apparently, if you play the game through to 2079, at some point the age of players hits\nan overflow and they all think it's time to retire.\n\nThis is because each player's date of birth is stored as a 16-bit little-endian unsigned integer: the number of days elapsed since 30 December 1899 (the same base date used by Microsoft Excel and the game's internal date system). The two bytes are combined as:\n\n```\ndays = stats[35] + stats[36] * 256\ndob  = date(1899, 12, 30) + timedelta(days=days)\n```\n\nThis is a WORD (16-bit), so the maximum representable date is day 65,535 — 5 October 2079. After that point the game overflows and all player ages are calculated incorrectly. This is known as the 2079 Bug.\n\nI've never played the game that far. I have occasionally taken it to the current day (as recently as the 2020s), but it's known that the game has limitations in endurance.\n\n## Full motion video cutscenes\n\nThe game features a number of full motion video cutscenes. These include specially-filmed live-action football footage, heavily tinted blue/purple, with overlaid title text in a typewriter-style font. They were shown when you won or lost a cup final, won the league, got promoted, relegated, or sacked. There was also an intro and a closing credits video.\n\nI knew these videos would be in the data too, though I wouldn't have known what format or how they'd be stored. Claude managed to find and identify them:\n\nThe game's video files use EA's proprietary TGQ format (\n\n`.TGQ`\n\nextension), also known as EA TGQ or EABT. The container uses EA's chunk format, identifiable by the`SCHl`\n\nmagic bytes at the start of each file.\n\nI hoped it would be able to maybe extract the frames, but it had no problem decoding the video files.\n\n[ffmpeg](https://www.ffmpeg.org/) can decode these files natively using the `ea`\n\ndemuxer:\n\n```\nffmpeg -i INPUT.TGQ -c:v libx264 -c:a aac OUTPUT.mp4\n```\n\nDocs and explanation of the video files can be found here:\n[github.com/bennuttall/fsm-97-data/blob/main/docs/videos.md](https://github.com/bennuttall/fsm-97-data/blob/main/docs/videos.md)\n\n## Credits\n\nThe end credits are something of a masterpiece. The game developers and all the staff who worked on the game are credited, along with childhood photos and aspects of what they worked on, including example lines of C/C++ code, stadium sketches, colours and coordinates, specs and more:\n\nSince many of these staffers are also included in the game, I was able to create a [credits\npage](https://fsm.bennuttall.com/credits/) listing them and link to their player listings on the [EA\nAll Stars](https://fsm.bennuttall.com/clubs/ea-all-stars/).\n\n## Join the project\n\nIf you have a copy of the game, head over to the [GitHub](https://github.com/bennuttall/fsm-97-data)\npage and see if you can extract the data yourself, and have a play with it, maybe find things I've\nnot found yet.\n\nThere are a few other things I'd like to investigate. I wasted a bunch of time (and Claude usage) trying to extract the stadium graphics, to no avail. I was hoping to extract one of these for each club:", "url": "https://wpnews.pro/news/getting-claude-to-extract-data-from-a-1997-football-manager-game", "canonical_source": "https://bennuttall.com/blog/2026/04/fsm97/", "published_at": "2026-05-27 21:21:15+00:00", "updated_at": "2026-05-27 21:44:37.380148+00:00", "lang": "en", "topics": ["large-language-models", "generative-ai", "ai-tools"], "entities": ["Claude", "FIFA Soccer Manager", "Wine", "Linux", "Windows 95", "Windows 10", "Bennuttall", "Mobygames"], "alternates": {"html": "https://wpnews.pro/news/getting-claude-to-extract-data-from-a-1997-football-manager-game", "markdown": "https://wpnews.pro/news/getting-claude-to-extract-data-from-a-1997-football-manager-game.md", "text": "https://wpnews.pro/news/getting-claude-to-extract-data-from-a-1997-football-manager-game.txt", "jsonld": "https://wpnews.pro/news/getting-claude-to-extract-data-from-a-1997-football-manager-game.jsonld"}}