PDA

View Full Version : Help using AV to create FOF9 player files


Passacaglia
02-22-2025, 03:32 PM
Apologies for going On Topic in the Off Topic area, but I thought this would get a bigger audience here so I could get more input.

I'm looking for ideas in using the "Approximate Value" stat from Pro Football Reference, and getting good ratings for players in FOF9. I'm going to start with QBs, since they have their own file, and since there's more opinions on which QBs are good.

For those unaware of how FOF9 player files work, you a file consists of players and the teams they were on in the year you're starting, as well as players who will enter the league in later years. I'm working on a 1960 file, so it'll have players from 1960 and the teams they are on. So we're going to need to include everyone who was active in 1960 or later -- Pro Football Reference gives me 888 of these players.

Here's a little background on Approximate Value -- Approximate Value | Pro-Football-Reference.com (https://www.pro-football-reference.com/about/approximate_value.htm) -- feel free to quibble about how good of a measure this is, but I'm not aware of any other composite statistics that attempt to compare players in a way that's specific to the individual, removing the rest of the team. If anyone wants to throw out other ideas, though, feel free.

Anyway, here's the Top 25 QBs according to AV:

Player AV From To G GS AV
Tom Brady 326 2000 2022 335 333 326
Drew Brees 277 2001 2020 287 286 277
Peyton Manning 271 1998 2015 266 265 271
Brett Favre 259 1991 2010 302 298 259
Aaron Rodgers 243 2005 2024 248 241 243
Fran Tarkenton 233 1961 1978 246 239 233
Philip Rivers 218 2004 2020 244 240 218
Dan Marino 216 1983 1999 242 240 216
Matt Ryan 210 2008 2022 234 234 210
Ben Roethlisberger 208 2004 2021 249 247 208
John Elway 206 1983 1998 234 231 206
Russell Wilson 188 2012 2024 199 199 188
Matthew Stafford 180 2009 2024 222 222 180
Eli Manning 169 2004 2019 236 234 169
Steve Young 168 1985 1999 169 143 168
Joe Montana 166 1979 1994 192 164 166
Dan Fouts 163 1973 1987 181 171 163
Warren Moon 163 1984 2000 208 203 163
Ken Anderson 160 1971 1986 192 172 160
John Hadl 146 1962 1977 224 166 146
Johnny Unitas 145 1956 1973 165 145 145
Len Dawson 143 1957 1975 192 158 143
Carson Palmer 141 2004 2017 182 181 141
Vinny Testaverde 141 1987 2007 233 214 141
Cam Newton 140 2011 2021 148 144 140

I'm going to guess the formatting is not the best, sorry for that. I think you get the idea.

Anyway, you've got the GOAT on top, so I guess we're doing okay there. Brees and Manning at 2 and 3 expose a couple issues we've got, though.

First, QBs are better now than before. Or, teams are more QB dependent than before. I think I'm okay with this happening -- I'm not trying to see "who's better regardless of era", I'm just trying to make an FOF9 player file that works, and I think having better QBs as time goes on will allow the league to evolve. Open to other thoughts here, though.

2nd, Brees ahead of Manning? I'm chalking this up to games played. AV is cumulative, in that the more you play, the higher your score will be. Brees played 287 games, and Manning played 266. But Brees has an AV of 277, and Manning was 271. Manning's AV per game was over 1, and it was less than 1 for Brees.

So let's look at AV per game. I'm going to give 1 point per game started, and half a point per game not started. Our new Top 25:

Joe Milton 1 2024 2024 1 0 1 2.00
Tony Robinson 1 1987 1987 1 0 1 2.00
Norm Van Brocklin 17 1950 1960 12 12 17 1.42
Jayden Daniels 20 2024 2024 17 17 20 1.18
Lamar Jackson 114 2018 2024 103 94 114 1.16
Patrick Mahomes 123 2017 2024 112 112 123 1.10
Steve Young 168 1985 1999 169 143 168 1.08
Jalen Hurts 75 2020 2024 77 66 75 1.05
Roger Staubach 127 1969 1979 131 114 127 1.04
Peyton Manning 271 1998 2015 266 265 271 1.02
Josh Allen 112 2018 2024 111 110 112 1.01
Mike Hohensee 2 1987 1987 2 2 2 1.00
Stephen McGee 2 2010 2011 3 1 2 1.00
Mike Hold 1 1987 1987 2 0 1 1.00
Brian McClure 1 1987 1987 1 1 1 1.00
Mark Stevens 1 1987 1987 2 0 1 1.00
Aaron Rodgers 243 2005 2024 248 241 243 0.99
Tom Brady 326 2000 2022 335 333 326 0.98
Brock Purdy 37 2022 2024 40 36 37 0.97
Drew Brees 277 2001 2020 287 286 277 0.97
Fran Tarkenton 233 1961 1978 246 239 233 0.96
Cam Newton 140 2011 2021 148 144 140 0.96
Daunte Culpepper 98 1999 2009 105 100 98 0.96
Russell Wilson 188 2012 2024 199 199 188 0.94
Trent Green 110 1997 2008 120 113 110 0.94

Your new best QBs of all time, Joe Milton and Tony Robinson!

We've got some other issues here, too.

Norm Van Brocklin. So, Pro Football Reference only starts calculating AV in 1960. He was the MVP in all four major publications that year -- List of NFL Most Valuable Player awards - Wikipedia (https://en.wikipedia.org/wiki/List_of_NFL_Most_Valuable_Player_awards). He retired that year, as the league's MVP and winning the NFL Championship. Badass. 9 Pro Bowls in 12 seasons, and his first season he looks not to have played much. So 9 of 11? Also, it seems unfair to take just his only MVP season, and use that to completely base his metric on. But his 1960 stats don't seem crazy out of line with the rest of his career.

Season Age Team Lg Pos G GS QBrec Cmp Att Cmp% Yds TD TD% Int Int% Lng Y/A AY/A Y/C Y/G Rate Sk Yds Sk% NY/A ANY/A 4QC GWD AV Awards
1949 23 RAM NFL 8 0 32 58 55.2 601 6 10.3 2 3.4 51 10.4 10.88 18.8 75.1 111.4 69 2 1
1950 24 RAM NFL QB 12 6 5-1-0 127 233 54.5 2061 18 7.7 14 6.0 58 8.8 7.69 16.2 171.8 85.1 103 1 1 PB
1951 25 RAM NFL QB 12 2 1-1-0 100 194 51.5 1725 13 6.7 11 5.7 81 8.9 7.68 17.3 143.8 80.8 65 0 0 PB
1952 26 RAM NFL QB 12 6 6-0-0 113 205 55.1 1736 14 6.8 17 8.3 84 8.5 6.10 15.4 144.7 71.5 97 1 1 PB
1953 27 RAM NFL QB 12 12 8-3-1 156 286 54.5 2393 19 6.6 14 4.9 70 8.4 7.49 15.3 199.4 84.1 61 1 2 PB
1954 28 RAM NFL QB 12 11 6-4-1 139 260 53.5 2637 13 5.0 21 8.1 80 10.1 7.51 19.0 219.8 71.9 80 1 0 PB
1955 29 RAM NFL QB 12 12 8-3-1 144 272 52.9 1890 8 2.9 15 5.5 74 6.9 5.06 13.1 157.5 62.0 106 4 3 PB
1956 30 RAM NFL QB 12 4 2-2-0 68 124 54.8 966 7 5.6 12 9.7 58 7.8 4.56 14.2 80.5 59.5 15 0 0
1957 31 RAM NFL QB 12 12 6-6-0 132 265 49.8 2105 20 7.5 21 7.9 70 7.9 5.89 15.9 175.4 68.8 119 1 1
1958 32 PHI NFL QB 12 12 2-9-1 198 374 52.9 2409 15 4.0 20 5.3 91 6.4 4.84 12.2 200.8 64.1 46 2 1 PB
1959 33 PHI NFL QB 12 12 7-5-0 191 340 56.2 2617 16 4.7 14 4.1 71 7.7 6.79 13.7 218.1 79.5 72 1 3 PB
1960 34 PHI NFL QB 12 12 10-2-0 153 284 53.9 2471 24 8.5 17 6.0 64 8.7 7.70 16.2 205.9 86.5 10 96 3.40 8.08 7.11 5 4 17 PB,AP-1
12 Yrs 140 101 61-36-4 1553 2895 53.6 23611 173 6.0 178 6.1 91 8.2 6.58 15.2 168.7 75.1 10 929 3.40 7.81 7.11 19 17 17
17 Game Avg 17 12 61-36-4 189 352 53.6 2867 21 6.0 22 6.1 91 8.2 6.58 15.2 168.7 75.1 113 2 2 2
RAM (9 Yrs) 104 65 42-20-3 1011 1897 53.3 16114 118 6.2 127 6.7 84 8.5 6.73 15.9 154.9 74.7 715 11 9
PHI (3 Yrs) 36 36 19-16-1 542 998 54.3 7497 55 5.5 51 5.1 91 7.5 6.31 13.8 208.3 75.7 10 214 3.40 7.23 7.11 8 8 17


Jayden Daniels -- Obviously we're not putting him in the conversation for best QB ever, even if we're okay with better QBs. But who the hell knows what to do with a number like that from a rookie?

I asked ChatGPT for advice, and here's what I got:

Setting a minimum game threshold (e.g., only consider QBs with at least 50 starts)?
Incorporating peak performance (e.g., highest single-season AV or best 5-year stretch)?
Weighting postseason success (e.g., Super Bowls, playoff wins)?
Comparing to era-adjusted stats (e.g., passer rating+, adjusted net yards per attempt)?


Minimum game threshold is a no-brainer, but the question is what it should be. Obviously above 3 to get rid of a lot of the dudes in my top 25 from above. But 50 is too high -- I don't want to eliminate Norm Van Brocklin or Jayden Daniels just because I don't like their outlier-ish ratings. I'm going with 12, since it allows me to include Van Brocklin.

I don't like the idea of incorporating peak performance. I feel like I want to include a player's ups and downs. Also, getting a player's top 5 years would require some manipulation, that I could probably slog through for QBs, but doing it for all positions would be too much.

Not interested in weighting postseason success -- too team-based, and we're trying to get at how good the player is individually.

Not interested in era-adjusted stats as I said before, and also not interested in the other stats mentioned that don't remove the rest of the team as much.

I told GPT I like the idea of a 12-game minimum threshold, and I said I was still looking for something to reward longevity. The response:

Blending career AV with per-game factor: e.g., (AV * weight) + (AV per game * weight), where weight balances impact vs. longevity.
Bonus for career milestones: Extra points for reaching 100, 150, 200 games started.
Peak + longevity mix: A blend of best 5-year AV and total career AV.

I like the idea of blending, but not the other two. GPT suggested this formula: Score=(AV×0.6)+(AV/G×100×0.4) to give a 60% weight to total AV and a 40% weight to AV/G. Here's what we get:

Player AV From To G GS AV AV/G GPT
Tom Brady 326 2000 2022 335 333 326 0.98 234.64
Drew Brees 277 2001 2020 287 286 277 0.97 204.87
Peyton Manning 271 1998 2015 266 265 271 1.02 203.43
Brett Favre 259 1991 2010 302 298 259 0.86 189.93
Aaron Rodgers 243 2005 2024 248 241 243 0.99 185.55
Fran Tarkenton 233 1961 1978 246 239 233 0.96 178.23
Philip Rivers 218 2004 2020 244 240 218 0.90 166.83
Dan Marino 216 1983 1999 242 240 216 0.90 165.45
Matt Ryan 210 2008 2022 234 234 210 0.90 161.90
John Elway 206 1983 1998 234 231 206 0.89 159.04
Ben Roethlisberger 208 2004 2021 249 247 208 0.84 158.35
Russell Wilson 188 2012 2024 199 199 188 0.94 150.59
Steve Young 168 1985 1999 169 143 168 1.08 143.88
Matthew Stafford 180 2009 2024 222 222 180 0.81 140.43
Joe Montana 166 1979 1994 192 164 166 0.93 136.90
Dan Fouts 163 1973 1987 181 171 163 0.93 134.85
Ken Anderson 160 1971 1986 192 172 160 0.88 131.16
Eli Manning 169 2004 2019 236 234 169 0.72 130.17
Warren Moon 163 1984 2000 208 203 163 0.79 129.53
Johnny Unitas 145 1956 1973 165 145 145 0.94 124.42
Cam Newton 140 2011 2021 148 144 140 0.96 122.36
Randall Cunningham 137 1985 2001 161 135 137 0.93 119.23
Len Dawson 143 1957 1975 192 158 143 0.82 118.49
Terry Bradshaw 140 1970 1983 168 158 140 0.86 118.36
Bob Griese 138 1967 1980 161 151 138 0.88 118.18


We're back to Brady, Brees, Manning again. Top 9 are the exact same as the first time, in order. I played around a little, and felt best with an 85% weight toward AV/G. Now we've got:

Player AV From To G GS AV AV/G GPT GPT2
Tony Robinson 1 1987 1987 1 0 1 2.00 80.60 170.15
Joe Milton 1 2024 2024 1 0 1 2.00 80.60 170.15
Tom Brady 326 2000 2022 335 333 326 0.98 234.64 131.86
Peyton Manning 271 1998 2015 266 265 271 1.02 203.43 127.41
Drew Brees 277 2001 2020 287 286 277 0.97 204.87 123.73
Norm Van Brocklin 17 1950 1960 12 12 17 1.42 66.87 122.97
Aaron Rodgers 243 2005 2024 248 241 243 0.99 185.55 120.93
Steve Young 168 1985 1999 169 143 168 1.08 143.88 116.74
Fran Tarkenton 233 1961 1978 246 239 233 0.96 178.23 116.62
Lamar Jackson 114 2018 2024 103 94 114 1.16 114.69 115.48
Brett Favre 259 1991 2010 302 298 259 0.86 189.93 112.23
Patrick Mahomes 123 2017 2024 112 112 123 1.10 117.73 111.80
Philip Rivers 218 2004 2020 244 240 218 0.90 166.83 109.27
Dan Marino 216 1983 1999 242 240 216 0.90 165.45 108.58
Russell Wilson 188 2012 2024 199 199 188 0.94 150.59 108.50
Matt Ryan 210 2008 2022 234 234 210 0.90 161.90 107.78
Roger Staubach 127 1969 1979 131 114 127 1.04 117.67 107.17
John Elway 206 1983 1998 234 231 206 0.89 159.04 106.21
Joe Montana 166 1979 1994 192 164 166 0.93 136.90 104.17
Dan Fouts 163 1973 1987 181 171 163 0.93 134.85 103.17
Jayden Daniels 20 2024 2024 17 17 20 1.18 59.06 103.00
Josh Allen 112 2018 2024 111 110 112 1.01 107.74 102.95
Cam Newton 140 2011 2021 148 144 140 0.96 122.36 102.51
Ben Roethlisberger 208 2004 2021 249 247 208 0.84 158.35 102.49
Johnny Unitas 145 1956 1973 165 145 145 0.94 124.42 101.27


Obviously I haven't applied the minimum game threshold yet, so I guess we can look at Top 23. Whatever. Jalen Hurts and Randall Cunningham are next, if you're curious.

Anyway, that's where I'm at now. Manning overtakes Brees for #2, which feels right. Van Brocklin comes in at 4, which I'm fine with, and should make playing in 1960 kind of fun. Obvious skew toward current players, which I'm mostly fine with (seeing Philip Rivers, Dan Marino, Russell Wilson, Matt Ryan, Roger Staubach, John Elway, Joe Montana, Dan Fouts in that order makes me cringe a little though).

One issue I still have is that GPT multiplied the AV/G by 100. When I asked about it, here's what I got: The multiplication by 100 is just a scaling factor to keep the two components on a similar scale. Since AV per game is typically a small number (e.g., around 0.9 to 1.2 for most top QBs), without scaling, the second term would be much smaller than the first and wouldn’t contribute much to the final score.

That makes sense, but I feel like the 100 number is kind of a tossed-out guess, and I'd rather do something that is more specific to the averages for each stat. Maybe that's dumb, though, because then once I did that, I'd play around with the weights and end up getting something that looks pretty much like this anyway.

dubb93
02-23-2025, 03:34 PM
All I got is I hope you make this work because I’d love to play it.

korme
02-23-2025, 07:26 PM
How far down this final list is Burrow?

korme
02-23-2025, 07:27 PM
DOLA

I was going to suggest you hit up GPT. It's great for creative little tasks like this. Fun project, I'll keep following along or chime in if I have any ideas.

Passacaglia
02-24-2025, 09:06 AM
All I got is I hope you make this work because I’d love to play it.

Thanks! I actually feel good about these ratings the way they are now, so if there's no suggestions by the time I'm done with the files, I'm fine keeping things just as they are. But if people have ideas how I can improve anything, it's helpful.

I'll keep you posted on how it goes! Right now, I've got a decent 1960 QBs file with 57 players in it -- that's how many QBs threw a pass in 1960, according to Pro Football Reference. That's not enough for FOF9 -- there's 21 teams in 1960, so you need at least 63 to fill the rosters of each team. It looks like the game has 104 QBs, so I'll need to add another 47. My plan is to go through old drafts and find some guys who were drafted but never played to fill out the rest.

The other thing I need to do to fill out the player attribute fields. Right now, they are all -1, which means that their ability in that category is determined by using the overall rating. But putting better values in here will give each player more character as opposed to only being valued by how good they are.

Then I need to create the file for the rest of the players. I'm hoping that even though it's a lot more players, I'll be able to just go position by position, and it'll be smoother once I've already done it for QBs.

Passacaglia
02-24-2025, 09:25 AM
How far down this final list is Burrow?

Joe Burrow comes in at #55. That probably doesn't tell you much given that this list is not era-adjusted, and really rewards players in the passing era. Here's the Top Ten of players entering the league in 2019-2021 for perspective:

Player AV From To G GS AV AV/G GPT GPT2
Jalen Hurts 75 2020 2024 77 66 75 1.05 86.96 100.41
Kyler Murray 77 2019 2024 82 82 77 0.94 83.76 91.37
Joe Burrow 63 2020 2024 69 69 63 0.91 74.32 87.06
Justin Herbert 70 2020 2024 79 79 70 0.89 77.44 85.82
Justin Fields 41 2021 2024 50 44 41 0.87 59.49 80.30
Tua Tagovailoa 49 2020 2024 64 62 49 0.78 60.51 73.46
Jordan Love 30 2021 2024 42 33 30 0.80 50.00 72.50
Easton Stick 4 2020 2023 6 4 4 0.80 34.40 68.60
Trevor Lawrence 41 2021 2024 60 60 41 0.68 51.93 64.23
Gardner Minshew II 35 2019 2024 59 46 35 0.67 47.67 61.92


The last number is my ratings as I have them now. In FOF9 terms, I've got Hurts with a 7, Murray and Burrow with a 6, Herbert and Fields with a 5.

These are some interesting numbers. Fields being so high doesn't make sense, but maybe what AV is trying to say is that he was okay while the Bears were bad? Jordan Love being so low is interesting, too. I'm wondering if he's getting dinged by the 9 games he played but didn't start. I just checked, and it looks like he threw a pass in every game he played but didn't start, so it's not like he was just a holder or something. Hurts has some games he played but didn't pass, but he did at least have a rushing attempt every game he played. Either way, I think giving awarding half a game for each game played but not started is way too much.

Since we're talking Bengals, Carson Palmer is a weird case. Pro Football Reference has him starting in 2004 even though he was drafted in 2003, because he didn't play at all in 2003. There's probably all sorts of players like that, but I'm guessing none as high-profile as him.

Passacaglia
02-24-2025, 09:36 AM
DOLA

I was going to suggest you hit up GPT. It's great for creative little tasks like this. Fun project, I'll keep following along or chime in if I have any ideas.

GPT has been massively helpful for this. Besides talking through developing formulas like I mentioned, I've used it to help get information that's available out there somewhere, and put it into a table format, so I can paste it into Excel.

Starting with the initial 57, I've been able to get jersey number, height, weight, birthdate, birth city, college, year drafted, which pick they were drafted, original team, and year they signed with their current team, which all go into the player file. It's definitely wonky, and can't handle being asked for too much at once, but for the most part, I have it at a point where I don't see glaring errors. I know some draft picks are wrong, but they're close enough.

Some of the fields I wasn't able to get. I asked it for hand size and arm length, and it kept telling me it would take a few hours and let me know, but it just kept saying it would be just a few hours more for days. I was able to get it to give me estimates for the "play percentage" and "hall of fame points" field, and it gave me salary info for every player I asked it for. No idea if it's correct, but it at least seems reasonable.

Like I said a couple posts up, I still need to add values for the player attribute fields. Things like Touch, Quality, Arm Strength, Scramble, etc. I've played with this a little, and it's given me numbers that seem reasonable in how well they fit the players (mostly looking at scramble and seeing running QBs with higher numbers here).

It's frustrating working with GPT, but still fun!

Passacaglia
02-24-2025, 10:01 AM
Playing around with counting a non-started game as 10% of a game. Here's your new top 25

Player AV From To G GS AV AV/G GPT GPT2
Tony Robinson 1 1987 1987 1 0 1 10.00 400.60 850.15
Joe Milton 1 2024 2024 1 0 1 10.00 400.60 850.15
Mike Hold 1 1987 1987 2 0 1 5.00 200.60 425.15
Mark Stevens 1 1987 1987 2 0 1 5.00 200.60 425.15
Dave Lewis 5 1970 1970 14 0 5 3.57 145.86 304.32
Shawn Moore 1 1992 1992 3 0 1 3.33 133.93 283.48
Joe Germaine 1 1999 1999 3 0 1 3.33 133.93 283.48
Jim Sorgi 5 2004 2009 16 0 5 3.13 128.00 266.38
Rich Campbell 2 1981 1984 7 0 2 2.86 115.49 243.16
Jeff Brohm 2 1996 1997 8 0 2 2.50 101.20 212.80
Mike Machurek 1 1984 1984 4 0 1 2.50 100.60 212.65
Ricky Turner 1 1988 1988 4 0 1 2.50 100.60 212.65
Travis Brown 1 2000 2003 4 0 1 2.50 100.60 212.65
Matt Simms 1 2013 2014 4 0 1 2.50 100.60 212.65
Tom Kennedy 3 1966 1966 6 1 3 2.00 81.80 170.45
Harry Theofiledes 1 1968 1968 5 0 1 2.00 80.60 170.15
David Fales 1 2016 2019 5 0 1 2.00 80.60 170.15
Sam Adkins 2 1977 1981 11 0 2 1.82 73.93 154.85
Stephen McGee 2 2010 2011 3 1 2 1.67 67.87 141.97
Ray Brown 2 1960 1960 12 0 2 1.67 67.87 141.97
Jeff Lewis 2 1996 2000 12 0 2 1.67 67.87 141.97
Chon Gallegos 1 1962 1962 6 0 1 1.67 67.27 141.82
Harold Stephens 1 1962 1962 6 0 1 1.67 67.27 141.82
Nate Sudfeld 1 2017 2022 6 0 1 1.67 67.27 141.82
Tom Brady 326 2000 2022 335 333 326 0.98 234.74 132.06


Okay, here's the real one:

Player AV From To G GS AV AV/G GPT GPT2
Tom Brady 326 2000 2022 335 333 326 0.98 234.74 132.06
George Blanda 128 1950 1975 224 83 128 1.32 129.53 131.25
Peyton Manning 271 1998 2015 266 265 271 1.02 203.49 127.54
Drew Brees 277 2001 2020 287 286 277 0.97 204.93 123.85
Steve Young 168 1985 1999 169 143 168 1.15 146.95 123.28
Norm Van Brocklin 17 1950 1960 12 12 17 1.42 66.87 122.97
Aaron Rodgers 243 2005 2024 248 241 243 1.01 186.02 121.91
Lamar Jackson 114 2018 2024 103 94 114 1.20 116.45 119.21
Fran Tarkenton 233 1961 1978 246 239 233 0.97 178.68 117.57
Brett Favre 259 1991 2010 302 298 259 0.87 190.12 112.63
Roger Staubach 127 1969 1979 131 114 127 1.10 120.11 112.35
Patrick Mahomes 123 2017 2024 112 112 123 1.10 117.73 111.80
Philip Rivers 218 2004 2020 244 240 218 0.91 167.07 109.78
Joe Montana 166 1979 1994 192 164 166 1.00 139.41 109.49
Dan Marino 216 1983 1999 242 240 216 0.90 165.57 108.84
Russell Wilson 188 2012 2024 199 199 188 0.94 150.59 108.50
Matt Ryan 210 2008 2022 234 234 210 0.90 161.90 107.78
John Elway 206 1983 1998 234 231 206 0.89 159.22 106.60
Jalen Hurts 75 2020 2024 77 66 75 1.12 89.71 106.26
Johnny Unitas 145 1956 1973 165 145 145 0.99 126.46 105.59
Randall Cunningham 137 1985 2001 161 135 137 1.00 122.03 105.18
Dan Fouts 163 1973 1987 181 171 163 0.95 135.71 105.00
Cam Newton 140 2011 2021 148 144 140 0.97 122.78 103.41
Josh Allen 112 2018 2024 111 110 112 1.02 107.89 103.27


And the Joe Burrow cohort (he checks in at #65 now):

Player AV From To G GS AV AV/G GPT GPT2
Jalen Hurts 75 2020 2024 77 66 75 1.12 89.71 106.26
Kyler Murray 77 2019 2024 82 82 77 0.94 83.76 91.37
Joe Burrow 63 2020 2024 69 69 63 0.91 74.32 87.06
Justin Herbert 70 2020 2024 79 79 70 0.89 77.44 85.82
Justin Fields 41 2021 2024 50 44 41 0.92 61.37 84.29
Jordan Love 30 2021 2024 42 33 30 0.88 53.40 79.72
Tua Tagovailoa 49 2020 2024 64 62 49 0.79 60.91 74.31
Gardner Minshew II 35 2019 2024 59 46 35 0.74 50.60 68.15
Trevor Lawrence 41 2021 2024 60 60 41 0.68 51.93 64.23
Daniel Jones 45 2019 2024 70 69 45 0.65 53.05 62.10

Passacaglia
02-24-2025, 10:14 AM
In FOF9 terms, I've got Hurts with a 7, Murray and Burrow with a 6, Herbert and Fields with a 5.


This is probably a good time to clarify this. From the FOF9 text file that explains these:

0 - The quarterback is of replacement quality. Expect low ratings across the board.
1 - The quarterback is of backup quality. Ratings are generally low.
2 - The quarterback is of starting quality. Ratings can vary.
3 - The quarterback is usually one of the better starters in the league.
4-7 - Increasingly rare - quarterbacks are often All-Star level.
8 - The quarterback is often the best in the league.
9 - The quarterback is a generational talent.
10 - The quarterback is below replacement quality, and will only be placed on a team at the start of a new universe if he's needed to fill a roster.

I looked at the 2024 players file that comes with the game, and got these numbers:

Row Labels Count of PLAYERID
0 805 34.28% 304
1 572 27.86% 247
2 377 15.36% 136
3 158 6.44% 57
4 73 5.36% 48
5 48 4.29% 38
6 20 3.21% 29
7 15 2.14% 19
8 10 0.71% 6
9 1 0.36% 3
10
(blank) 376 0.00% 0
Grand Total 2455

Sorry about the formatting.

The percentages don't line up with the numbers. That's because I also used the distribution of the 2024 quarterbacks file, and took whichever percent was highest. Then for whatever reason, I decided I didn't want any 10s, since I want everyone I create to get in the game. I dunno if that makes sense, but whatever. Anyway, the last column is that percent times 888, since thats how many QBs are in my file. So there will be three 9s, six 8s, and so on down, until everyone left is a 0.

George Blanda is obviously interesting here -- he goes from not in the top 25 and a 6 to #2 and a 9, based on his 83 starts in 224 total games. Blanda is a hard guy to rate, but he's pretty awesome, so I'm okay with him being up there.

Passacaglia
02-26-2025, 01:40 PM
Some of the fun of going through this is finding interesting players I've never heard of, or interesting things about players I have. Today we have Ronnie Knox (https://en.wikipedia.org/wiki/Ronnie_Knox).

An All-American at Santa Monica High School, and known by his step-father's surname, Ronnie Knox played under the tutelage of coach Jim Sutherland. He played his freshman season for Pappy Waldorf's California Golden Bears before abruptly transferring to UCLA in the fall of 1954. Knox's stepfather, Harvey Knox, was accused of interfering with the Bears' coaching staff and of making extreme monetary demands on the university.

Harvey Knox interfered with his son's high school coaches and Ronnie played for three different high school teams (Beverly Hills, Inglewood, Santa Monica) in three years. Harvey Knox was also accused of interfering in the business of his stepdaughter, actress Patricia Knox.

Ronnie Knox played for one season at UCLA in 1955 before being declared ineligible due to accepting "under-the-table" financing.

After leaving UCLA, Knox signed a movie contract with Metro-Goldwyn-Mayer, but he would never appear in any pictures for the studio. Knox signed with the Hamilton Tiger-Cats, but would leave the team after one month to once again pursue a film career. Knox signed with the Calgary Stampeders on October 3, 1956, six days after quitting the Tiger-Cats.

Selected in the third round of the 1957 NFL draft, Knox signed with the Chicago Bears. He was suspended indefinitely by head coach (and owner) George Halas in early October 1957 for violations which included his stepfather's public criticism of the team and missing two practices and a quarterback tutoring session without reason.

Due to a bitter dispute with the Bears, Knox was not allowed by Halas to play for the Bears or play for any other NFL team. Instead, he signed with the Toronto Argonauts midway through 1958 CFL season with a promise by Harvey Knox to the team that he would not interfere. His most notable performance came on October 25, 1958 when, playing the Ottawa Rough Riders, he passed for 522 yards, then a team record and still second most in Argonaut history. After splitting up with his stepfather, Knox would play only one more season of football before retiring, saying that football was a "game for animals."

After leaving Toronto, Knox appeared in a few movies and television shows, but did not return to football, despite offers from the Oakland Raiders and San Diego Chargers of the newly formed American Football League.

In the 1960s, 1970s, and 1980s Knox drifted around California, residing only a short time in various towns, prior to moving again. In July 1988 a reporter located him as he was moving out of a one-room apartment in Canoga Park. Knox had lived there for just several weeks, spending the majority of his time writing poetry. Aside from past residences in McKinleyville, Malibu, and San Francisco, Knox lived for short periods in other states, i.e. Maine and Texas. He also lived for brief stints in Mexico and Europe.

Having been single since a divorce from painter Renate Druks in 1964, his philosophy was to stay free. Knox compared his lifestyle to the noble savage written about by James Fenimore Cooper. He read English literature by the hour, stretched out on a cot or in his worn out twelve-year-old car. He yearned for a life at sea.

Passacaglia
02-28-2025, 08:01 PM
We're moving on to Running Backs!

Using the same methodology that we did for QBs:

Player AV From To G GS AV AV/G GPT GPT2
Dave Meggett 52 1989 1998 146 12 52 2.05 113.09 181.82
James White 42 2014 2021 95 13 42 1.98 104.45 174.70
Ronnie Harmon 81 1986 1997 181 27 81 1.91 125.02 174.53
Danny Woodhead 43 2009 2017 101 14 43 1.89 101.57 167.46
Darren Sproles 78 2005 2019 183 31 78 1.69 114.33 155.21
Jim Brown 101 1961 1965 70 70 101 1.44 118.31 137.79
Ladell Betts 36 2002 2010 111 14 36 1.52 82.36 134.51
James Starks 29 2010 2016 76 13 29 1.50 77.50 132.07
Don McCauley 55 1971 1981 156 25 55 1.44 90.74 130.95
Amp Lee 36 1992 2000 116 15 36 1.43 78.97 127.31
Steve Sewell 29 1985 1991 94 12 29 1.44 74.83 126.38
Brian Mitchell 49 1990 2003 223 16 49 1.34 82.81 120.84
Leon Washington 34 2006 2014 126 14 34 1.35 74.37 119.78
Moe Williams 32 1996 2005 132 12 32 1.33 72.53 118.13
Laurence Maroney 27 2006 2010 49 17 27 1.34 69.67 117.66
Lenvil Elliott 32 1973 1981 101 16 32 1.31 71.44 115.82
Jerick McKinnon 36 2014 2023 116 18 36 1.29 73.40 115.47
Mewelde Moore 33 2004 2012 122 15 33 1.28 71.16 114.09
Essex Johnson 50 1968 1976 112 32 50 1.25 80.00 113.75
Lydell Mitchell 100 1972 1980 111 84 100 1.15 106.14 113.04
Marshall Faulk 164 1994 2005 176 156 164 1.04 139.92 112.83
Kevin Faulk 70 1999 2011 161 47 70 1.20 89.95 112.38
Tiki Barber 122 1997 2006 154 109 122 1.07 116.20 109.67
Terry Kirby 55 1993 2002 110 39 55 1.19 80.72 109.66
LaDainian Tomlinson 158 2001 2011 170 155 158 1.01 135.18 109.51

I suspected that the factor of 0.1 for a backup would not work for other positions. Maybe 0.5 is better?

Player AV From To G GS AV AV/G GPT GPT2
Jim Brown 101 1961 1965 70 70 101 1.44 118.31 137.79
Marshall Faulk 164 1994 2005 176 156 164 0.99 137.92 108.58
LaDainian Tomlinson 158 2001 2011 170 155 158 0.97 133.69 106.35
Barry Sanders 149 1989 1998 153 151 149 0.98 128.61 105.67
Lydell Mitchell 100 1972 1980 111 84 100 1.03 101.03 102.18
Edgerrin James 135 1999 2009 148 135 135 0.95 119.16 101.35
Walter Payton 167 1975 1987 190 184 167 0.89 135.92 100.96
Billy Sims 63 1980 1984 60 58 63 1.07 80.51 100.21
Terrell Davis 80 1995 2001 78 77 80 1.03 89.29 99.74
Larry Brown 92 1969 1976 102 84 92 0.99 94.77 97.89
Tiki Barber 122 1997 2006 154 109 122 0.93 110.31 97.16
Priest Holmes 92 1997 2007 113 82 92 0.94 92.94 94.01
Gale Sayers 65 1965 1971 68 65 65 0.98 78.10 92.83
Tony Dorsett 137 1977 1988 173 152 137 0.84 115.92 92.21
O.J. Simpson 116 1969 1979 135 129 116 0.88 104.75 92.10
Ricky Watters 122 1992 2001 144 142 122 0.85 107.33 90.82
Chuck Foreman 88 1973 1980 109 84 88 0.91 89.28 90.71
William Andrews 74 1979 1986 87 72 74 0.93 81.63 90.22
Emmitt Smith 169 1990 2004 226 219 169 0.76 131.78 89.91
Christian McCaffrey 83 2017 2024 95 88 83 0.91 86.08 89.55
Lawrence McCutcheon 86 1972 1981 109 82 86 0.90 87.62 89.44
Franco Harris 136 1972 1984 173 162 136 0.81 114.08 89.41
Alvin Kamara 89 2017 2024 115 84 89 0.89 89.18 89.38
Thurman Thomas 136 1988 2000 182 160 136 0.80 113.41 88.00
Maurice Jones-Drew 86 2006 2014 126 71 86 0.87 86.52 87.11

Passacaglia
02-28-2025, 08:14 PM
Shoot, it looks like I started in 1961 instead of 1960. I don't think it would change anything -- we'd have another season of Jim Brown, but it wouldn't change his ending numbers much. But I'll have to fix my spreadsheet.

One issue I foresee is deciding whether or not to keep FBs as FBs for old players. Pro Football Reference labels Jim Brown, Franco Harris, John Riggins, and Jim Taylor as FB. I'm assuming that's going to kill them in FOF.

Passacaglia
03-01-2025, 05:35 AM
I added in 1960. Also, I realized I still have players who started less than 11 games filtered out. While that makes sense for QBs, there may be some players here who are in backup roles and don't have 11 starts, but still may be good. Here's what I get when I remove that filter and replace it with 11 games:

Player AV From To G GS AV AV/G GPT GPT2
Jim Brown 122 1957 1965 82 82 122 1.49 132.71 144.76
Jahmyr Gibbs 27 2023 2024 32 7 27 1.38 71.58 121.74
Marshall Faulk 164 1994 2005 176 156 164 0.99 137.92 108.58
LaDainian Tomlinson 158 2001 2011 170 155 158 0.97 133.69 106.35
Barry Sanders 149 1989 1998 153 151 149 0.98 128.61 105.67
Bucky Irving 12 2024 2024 17 3 12 1.20 55.20 103.80
Lydell Mitchell 100 1972 1980 111 84 100 1.03 101.03 102.18
Edgerrin James 135 1999 2009 148 135 135 0.95 119.16 101.35
Walter Payton 167 1975 1987 190 184 167 0.89 135.92 100.96
Billy Sims 63 1980 1984 60 58 63 1.07 80.51 100.21
Bobby Mitchell 43 1958 1967 40 38 43 1.10 69.90 100.17
Terrell Davis 80 1995 2001 78 77 80 1.03 89.29 99.74
Larry Brown 92 1969 1976 102 84 92 0.99 94.77 97.89
Tiki Barber 122 1997 2006 154 109 122 0.93 110.31 97.16
Priest Holmes 92 1997 2007 113 82 92 0.94 92.94 94.01
Gale Sayers 65 1965 1971 68 65 65 0.98 78.10 92.83
Tony Dorsett 137 1977 1988 173 152 137 0.84 115.92 92.21
O.J. Simpson 116 1969 1979 135 129 116 0.88 104.75 92.10
Ricky Watters 122 1992 2001 144 142 122 0.85 107.33 90.82
Chuck Foreman 88 1973 1980 109 84 88 0.91 89.28 90.71
William Andrews 74 1979 1986 87 72 74 0.93 81.63 90.22
Jim Taylor 97 1958 1967 109 109 97 0.89 93.80 90.19
Emmitt Smith 169 1990 2004 226 219 169 0.76 131.78 89.91
Christian McCaffrey 83 2017 2024 95 88 83 0.91 86.08 89.55
Lawrence McCutcheon 86 1972 1981 109 82 86 0.90 87.62 89.44

Obviously that's no good. I'm going to make it so a game played but not started is worth 0.9 games. I think that helps normalize someone like Gibbs, who's benefiting way too much from being considered the backup. It might make sense to just go by games instead of starts, but this might help out some guys who were legit backups at the beginning or end of their careers. Here we go:

Player AV From To G GS AV AV/G GPT GPT2
Jim Brown 122 1957 1965 82 82 122 1.49 132.71 144.76
Barry Sanders 149 1989 1998 153 151 149 0.98 128.41 105.24
Marshall Faulk 164 1994 2005 176 156 164 0.94 136.10 104.71
LaDainian Tomlinson 158 2001 2011 170 155 158 0.94 132.31 103.40
Walter Payton 167 1975 1987 190 184 167 0.88 135.47 100.00
Terrell Davis 80 1995 2001 78 77 80 1.03 89.08 99.29
Billy Sims 63 1980 1984 60 58 63 1.05 79.94 99.00
Edgerrin James 135 1999 2009 148 135 135 0.92 117.81 98.47
Bobby Mitchell 43 1958 1967 40 38 43 1.08 69.02 98.28
Lydell Mitchell 100 1972 1980 111 84 100 0.92 96.93 93.49
Larry Brown 92 1969 1976 102 84 92 0.92 91.93 91.84
Gale Sayers 65 1965 1971 68 65 65 0.96 77.40 91.36
O.J. Simpson 116 1969 1979 135 129 116 0.86 104.12 90.76
Ricky Watters 122 1992 2001 144 142 122 0.85 107.14 90.41
Jim Taylor 97 1958 1967 109 109 97 0.89 93.80 90.19
Emmitt Smith 169 1990 2004 226 219 169 0.75 131.40 89.11
Tony Dorsett 137 1977 1988 173 152 137 0.80 114.27 88.69
Tiki Barber 122 1997 2006 154 109 122 0.82 105.84 87.66
Franco Harris 136 1972 1984 173 162 136 0.79 113.25 87.65
Christian McCaffrey 83 2017 2024 95 88 83 0.88 85.01 87.26
Charley Taylor 39 1964 1966 41 41 39 0.95 61.45 86.70
Curtis Martin 131 1995 2005 168 166 131 0.78 109.83 86.01
Priest Holmes 92 1997 2007 113 82 92 0.84 88.68 84.96
Thurman Thomas 136 1988 2000 182 160 136 0.76 111.86 84.69
William Andrews 74 1979 1986 87 72 74 0.87 79.02 84.67

Jahmyr Gibbs checks in at #27, and he would be like #43 if we just counted all games regardless of if he started.

Passacaglia
03-01-2025, 08:45 AM
One thing that jumped out to me was Emmitt Smith at #16. My first thought was that this confirms what I've always thought as a Lions fan in the 90s, that Barry was way better, and Emmitt just looks better because of his O-line. But I also wondered how much he's getting dinged for how long he stayed in the league -- his 15 years is way more than anyone else on this list, and guys who retired early, like Barry, Jim Brown, Terrell Davis, and Billy Sims are up high -- how much worse would those guys look with 15 year careers?

I thought about taking a best 5 seasons and seeing what that would look like. Stathead (Pro Football Reference's pay version) lets me gather data from individual season, but (very very stupidly) limits your results to 200 records per page. I've been able to slog through the copy-and-paste, go to next page, copy-and-paste" deal for 1000 QBs this way, and 2000 RBs, and figure I can do however many it takes for the rest of the positions, but having to go through all seasons that way...it's too much.

I did find a filter that lets you include only the first x seasons of a player's career. That seems like what I'm going for, although maybe that might give too much weight to a player's first season or two when they weren't as good or possibly a backup. Here's what I've got using just the first 10 seasons:

Player AV From To G GS AV AV/G GPT GPT2
Jim Brown 122 1960 1965 82 82 122 1.49 132.71 144.76
Marshall Faulk 154 1994 2003 146 141 154 1.06 134.74 113.07
LaDainian Tomlinson 153 2001 2010 156 154 153 0.98 131.08 106.42
Barry Sanders 149 1989 1998 153 151 149 0.98 128.41 105.24
Edgerrin James 134 1999 2008 141 135 134 0.95 118.58 101.23
Terrell Davis 80 1995 2001 78 77 80 1.03 89.08 99.29
Emmitt Smith 142 1990 1999 155 153 142 0.92 121.89 99.27
Billy Sims 63 1980 1984 60 58 63 1.05 79.94 99.00
Bobby Mitchell 43 1960 1967 40 38 43 1.08 69.02 98.28
Walter Payton 132 1975 1984 146 140 132 0.91 115.51 96.97
O.J. Simpson 112 1969 1978 122 121 112 0.92 103.95 94.90
Lydell Mitchell 100 1972 1980 111 84 100 0.92 96.93 93.49
Tony Dorsett 126 1977 1986 145 133 126 0.88 110.65 93.38
Larry Brown 92 1969 1976 102 84 92 0.92 91.93 91.84
Gale Sayers 65 1965 1971 68 65 65 0.96 77.40 91.36
Ricky Watters 122 1992 2001 144 142 122 0.85 107.14 90.41
Jim Taylor 97 1960 1967 109 109 97 0.89 93.80 90.19
Adrian Peterson 106 2007 2016 123 116 106 0.87 98.27 89.57
Thurman Thomas 127 1988 1997 154 154 127 0.82 109.19 89.15
Curtis Martin 127 1995 2004 156 154 127 0.82 108.81 88.34
Tiki Barber 122 1997 2006 154 109 122 0.82 105.84 87.66
Franco Harris 115 1972 1981 140 131 115 0.83 102.07 87.52
Christian McCaffrey 83 2017 2024 95 88 83 0.88 85.01 87.26
Charley Taylor 39 1964 1966 41 41 39 0.95 61.45 86.70
Priest Holmes 92 1997 2007 113 82 92 0.84 88.68 84.96

Jahmyr Gibbs is at #31. Emmitt Smith moves up from #16 to #7. Edgerrin James moves up from #8 to #5. Faulk passes Barry at #2, and pulls away pretty significantly. Walter Payton has a big drop from #5 to #10 -- he was the only one on here who had more than 10 years but dropped. His AV/G went up, but it was offset by the 15% weight in his total AV, which dropped. Worth noting that he no longer includes the 1985 season, where he was #2 in MVP voting (to Marcus Allen, himself a riser here from #39 to #27).

KingZal
03-01-2025, 03:01 PM
Great stuff. I'm curious to see how the final result will compare to nilodor's files. I do have a few comments and questions:


I've given a lot of thought to how peaks should be weighted for these kinds of files, especially when looking back on some of the outliers in nilodor's files. Cam Newton, for example, is rated absurdly high and I've found him terrifying to go up against. I assume his AV/ratings are boosted by his (admittedly incredible) MVP season, and while I find that fun in his case I can see why a purist might not want him to be ranked higher than, say, Josh Allen.
I'm glad you've looked into a cutoff for RBs because that's a position where great players fall off quickly and considerably. But you bring up a good point in pointing out how that cutoff hurts Payton.
Where does Deshaun Watson rank per AV? I ask about him because his peaks and valleys are so drastically far apart and that can't be blamed on age. He's not even thirty yet. Moral considerations aside, I'm not sure whether it makes more sense to weigh his best seasons more or his worst, and that goes for any player that yo-yo'd as drastically as he did (Carson Wentz is the closest comp I can think of).

On the topic of attribute fields: I read somewhere in the documentation that player attributes range from 0-250 but should not be higher than 100 except for rare, exceptional players. Nilodor doesn't have ratings for all attributes but many of the ratings that are there are considerably higher than 100. I haven't done a ton of attribute testing, but I did run some simulations to see how his players fared with their normal attribute stats versus having -1s across the board, and offensive stats were noticeably lower when using the -1s. Just something to keep in mind, I can post the actual stats when I'm back at my computer.

Passacaglia
03-02-2025, 01:30 PM
If you're curious:

23. Cam Newton
24. Josh Allen
76. Deshaun Watson

The first two get a 7 in my files at the moment.

Watson gets a 5. The good news for him is that he played 54 games in his 3.5 good season, and only 19 games in his 3-4 seasons since. His AV is 63, in 72 starts and 73 games total. Here's the QBs that entered the league in 2016-2018. There's a few players in there with similar peaks and valleys.

Player AV From To G GS AV AV/G GPT GPT2
Lamar Jackson 114 2018 2024 103 94 114 1.20 116.45 119.21
Patrick Mahomes 123 2017 2024 112 112 123 1.10 117.73 111.80
Josh Allen 112 2018 2024 111 110 112 1.02 107.89 103.27
Dak Prescott 112 2016 2024 122 122 112 0.92 103.92 94.83
Jared Goff 113 2016 2024 134 134 113 0.84 101.53 88.63
Deshaun Watson 63 2017 2024 73 72 63 0.87 72.75 83.72
Baker Mayfield 81 2018 2024 106 103 81 0.78 79.96 78.80
Carson Wentz 68 2016 2024 98 94 68 0.72 69.61 71.43
Nick Mullens 17 2018 2024 33 20 17 0.80 42.12 70.39
Mitchell Trubisky 43 2017 2024 78 57 43 0.73 54.90 68.29
Taylor Heinicke 21 2017 2024 42 29 21 0.69 40.32 62.06

For attributes: Yeah, one of the things I'm hoping to do that will improve on nilodor's files is to get rid of the -1 values he has here. Here's what the documentation says: "If not -1, this field should range from 0-250. Be careful, as the distribution of quarterback ratings can change how the game plays, considerably. The highest values should be reserved only for the very best quarterbacks in the league. Most quarterbacks should range from 0-100 in most categories."

I'm curious about your simulations -- what did you use for normal attribute stats as opposed to -1s across the board?

I'm still working on using GPT to fill these in for me. Here's a sample of what it gave me for the TOUCH rating:

Quarterback TOUCH Rating Notes
Joe Montana 225 Elite short-pass accuracy, West Coast maestro.
Drew Brees 240 Extremely precise, one of the most accurate ever.
Tom Brady 230 Surgical with short passes, high completion %.
Peyton Manning 235 Master of timing and precision passing.
Johnny Unitas 210 Great accuracy for his era, quick release.
Brett Favre 180 Strong but aggressive, touch was inconsistent.
Michael Vick 140 Cannon arm, but lacked soft touch on short passes.
Fran Tarkenton 195 Good short accuracy, but often played off-script.
Terry Bradshaw 160 Big arm, but more of a deep passer than a touch thrower.
Chad Pennington 245 Possibly the best touch passer ever, lacked arm strength.

These were the first values GPT chose to assign, so maybe that means they're the highest values? It took a couple days, but eventually it said it finished assigning it for all the QBs, but then it kept telling me the tool it uses to work with spreadsheets and data processing is temporarily unavailable. It volunteered to just display its ratings at 100 QBs a pop, but then my free limit ran out, so I'll try again tomorrow.

Passacaglia
03-02-2025, 01:33 PM
Also, I wanted to give it props for the high score on Chad Pennington. It really makes me feel like it's putting some real thought into it.

KingZal
03-03-2025, 09:34 PM
I didn't add any attribute ratings that weren't already there in nilo's files. I just made a copy of his 1970 file and set all the attributes to -1.

Just for reference, nilodor's files have the following columns filled out for non-filler quarterbacks:
Scramble
Decision Making
Accuracy
Footwork
Confidence
Speed
Hole RecognitionFor his other positions, only a couple columns are filled out and they don't appear to be consistently filled either. Aside from those I'd say about three quarters of those columns have -1s across the board, including all OL-related columns, all K/P columns (but not KR/PR), and all pass-defense columns (save for pass_defense_hands).

I created two universes, one for the "negative" (one) file and one using nilodor's original file (what I call the "positive" file), and simulated both from 1970 to 2016. I'm unfortunately unable to upload screenshots right now, for some reason, and I wasn't able to OCR the screenshots I took, but there is a statistical trends page in FOF9 and a couple things stood out to me when comparing both universe's trends:
Every passing statistic was at least slightly better in the positive universe, even with a limited number of attribute columns filled. Pass completion percentage in that universe ranged from 63-66; pass completion in the other universe hovered around 60-62 and even dropped to 59.8 on one occasion.
Sack numbers were higher in the positive universe as well. Every other defensive metric was either slightly higher in the negative universe (such as interceptions) or about the same.
Pass and rush attempt numbers were indistinguishable. I think rush yards per game were ever so slightly better in the negative universe, but without any averages I can't say for certain.The long and short of it is that with nilodor's attribute ratings, offense went up. But I don't know how noticeable that would be if I played with no attribute ratings. I'm playing through another nilodor universe where I removed attributes for all quarterbacks except for the hall of famers, but it doesn't feel noticeably different. Looking at the statistical trends for that one, it appears the pass completion is between the two universes I was talking about above.

KingZal
03-03-2025, 09:46 PM
I would love to see accurate attribute ratings for all players, if you can pull it off. My preference, personally, is for the outliers to be well represented. Even if you decide not to get granular with every column (I doubt anybody cares for granular kickoff attributes), I like seeing unique players have their best traits represented well, whether it's Stafford's arm talent, Hester's return ability, Barry's elusiveness, etc. But I don't want to be too nitpicky about how attributes should be done until you're further into that work.

Passacaglia
07-02-2025, 06:50 AM
Stathead (Pro Football Reference's pay version) lets me gather data from individual season, but (very very stupidly) limits your results to 200 records per page. I've been able to slog through the copy-and-paste, go to next page, copy-and-paste" deal for 1000 QBs this way, and 2000 RBs, and figure I can do however many it takes for the rest of the positions, but having to go through all seasons that way...it's too much.


I decided I'd try this again, by brushing up on my python -- actually vibe-coding with AI, since I don't know python at all. I got a script to pull the data on all QBs from 1920-2024 that didn't take too long, and one to pull the rest of the positions that took five hours last night. It has one row per player per season, for 108,159 rows in the non-QB file, and 5,278 rows in the QB file. All I have is Games, Games Started, and AV, and even AV doesn't exist until 1960. Not many players before then anyway, but I'm going to press on since I'm planning to start a dynasty in 1920.

Passacaglia
07-02-2025, 12:05 PM
Already encountered my first problem with the run, that might make me have to do it again. For my non-QB run, I left all the positions selected, but removed QB. That also caused me to remove players for whom the position was blank. I don't immediately see how to pull just blanks, and if I can't, I'll just have to rerun the whole thing and separate the QBs manually.

Passacaglia
07-10-2025, 09:56 PM
One issue I still have is that GPT multiplied the AV/G by 100. When I asked about it, here's what I got: The multiplication by 100 is just a scaling factor to keep the two components on a similar scale. Since AV per game is typically a small number (e.g., around 0.9 to 1.2 for most top QBs), without scaling, the second term would be much smaller than the first and wouldn’t contribute much to the final score.

That makes sense, but I feel like the 100 number is kind of a tossed-out guess, and I'd rather do something that is more specific to the averages for each stat. Maybe that's dumb, though, because then once I did that, I'd play around with the weights and end up getting something that looks pretty much like this anyway.

As I'm looking into this again, this factor was still bugging me. So here's what I've done to get rid of the arbitrary 100 number.

I kept the AV/G field the same as before -- total AV divided by GS + 0.1 * (G - GS). So if a QB plays in a game but didn't start, it counts as 10% of a game. I also used total AV itself.

Then I came up with a Z-score for both of these fields. For AV, that worked great. Tom Brady is way above everyone with a 326 total, Brees is 2nd place with 277. Brady gets a 1.000 and Brees is 0.998. Manning's 271 puts him in 3rd at 0.997. The AV/G field get wonky. I didn't have a threshold here, so Joe Milton and Tony Robinson are on top again. Lamar Jackson has the best Z-score of anyone in contention at 0.878. Using this rewards longevity too much IMO. So I used these Z-scores for AV/G, and took the Z-scores of them. That evened it up a bit -- Lamar Jackson's 0.878 became a 0.970, although I still feel like longevity is weighted too much.

https://i.imgur.com/ZJXdBAz.png

Although it looks like AV/G is enough for Manning and Rodgers to pass Brady.

Some data notes:

Last time I did this, I was eyeing the creation of a 1960 players file for FOF9 -- this time I'm considering one for 1920. So there are a lot of players with 0 for everything, since AV isn't calculated from 1920-1959. I don't think it will really throw things off much.

Also, last time I talked a lot about Norm Van Brocklin and George Blanda -- these guys and everyone else who played both before and after 1960 will be skewed down here, since their G and GS from before 1960 are counting, but they are only getting AV scores from 1960 on. So for example, George Blanda had 340 Games, 106 Games Started from 1949 to like 1975, but his total AV of 128 only covers the games from 1960 to the end. He still comes in at #23, despite a good chunk of his career getting a 0. He's also getting extra points from kicking duties, too, so it's all just a mess. Van Brocklin looks like a nobody, his 17 AV in 1960 puts him way behind in longevity, and it doesn't even look good at an AV/G level since all his Games from before 1960 are counted in the denominator. He's right behind Koy Detmer.

Passacaglia
07-10-2025, 10:06 PM
How far down this final list is Burrow?

Burrow drops to #99, and still behind Herbert, but it's close.

https://i.imgur.com/mJQaDGx.png

Burrow has a higher AV/G than Herbert, though, so it seems like it's injuries holding him back. I still find Fields's ranking interesting -- having him in this company shows that he belongs as an NFL starting QB.

Passacaglia
07-10-2025, 10:12 PM
Great stuff. I'm curious to see how the final result will compare to nilodor's files. I do have a few comments and questions:


I've given a lot of thought to how peaks should be weighted for these kinds of files, especially when looking back on some of the outliers in nilodor's files. Cam Newton, for example, is rated absurdly high and I've found him terrifying to go up against. I assume his AV/ratings are boosted by his (admittedly incredible) MVP season, and while I find that fun in his case I can see why a purist might not want him to be ranked higher than, say, Josh Allen.
I'm glad you've looked into a cutoff for RBs because that's a position where great players fall off quickly and considerably. But you bring up a good point in pointing out how that cutoff hurts Payton.
Where does Deshaun Watson rank per AV? I ask about him because his peaks and valleys are so drastically far apart and that can't be blamed on age. He's not even thirty yet. Moral considerations aside, I'm not sure whether it makes more sense to weigh his best seasons more or his worst, and that goes for any player that yo-yo'd as drastically as he did (Carson Wentz is the closest comp I can think of).



If you're curious:

23. Cam Newton
24. Josh Allen
76. Deshaun Watson


Now we have:

19. Cam Newton
31. Josh Allen
107. Deshaun Watson
129. Carson Wentz

I assume Allen will pass Newton in a couple years -- his AV/G is higher, and if he plays 34 games he should have no problem passing him in total AV, too.

KingZal
07-13-2025, 12:13 PM
Now we have:

19. Cam Newton
31. Josh Allen
107. Deshaun Watson
129. Carson Wentz

I assume Allen will pass Newton in a couple years -- his AV/G is higher, and if he plays 34 games he should have no problem passing him in total AV, too.
Thanks for the update. It's interesting to see where the outliers are.
Like I said earlier I was curious to see where Watson would rank, since everything I've read tells me his 2024 (half-)season was historically bad. So not surprised to see him dinged here.

KingZal
07-13-2025, 12:14 PM
What do you plan on doing with these files when you finish? Are you going to make individual players files by year like nilodor did, or just two big files for 1920?

Passacaglia
07-14-2025, 08:41 AM
Thanks for the update. It's interesting to see where the outliers are.
Like I said earlier I was curious to see where Watson would rank, since everything I've read tells me his 2024 (half-)season was historically bad. So not surprised to see him dinged here.

Deshaun Watson had an AV of 16 in each of 2018, 2019, and 2020. There's been a little over 200 QB seasons that were 16 or more. So very good seasons, but not historically good. Even in those three years, there were 17 QB seasons that were 16 or more, including a 22 from Mahomes in 2018 and a 25 from Lamar Jackson in 2019.

And Watson was indeed bad in 2024, his AV was 0. But historically bad? Nah.

Check out Dan Pastorini, who in 1981 had an AV of -6. 2TDs, 14 INTs.

Dan Pastorini 1981 Game Log | Pro-Football-Reference.com (https://www.pro-football-reference.com/players/P/PastDa00/gamelog/1981/)

There's also a couple more recent examples of a -5.

2021 Mike Glennon, 4 TDs, 10 INT.

Mike Glennon 2021 Game Log | Pro-Football-Reference.com (https://www.pro-football-reference.com/players/G/GlenMi00/gamelog/2021/)

There's also 2012 Ryan Lindley, 0 TDs, 7 picks.

Ryan Lindley 2012 Game Log | Pro-Football-Reference.com (https://www.pro-football-reference.com/players/L/LindRy00/gamelog/2012/)

Watson's 5 TDs and 3 INTs in 2024 seem downright good compared to these guys.

Passacaglia
07-14-2025, 08:47 AM
What do you plan on doing with these files when you finish? Are you going to make individual players files by year like nilodor did, or just two big files for 1920?


Right now, I'm making two big files for 1920, for use in my dynasty here:

1920 Racine Street Cardinals -- A No APFA FOF9 Dynasty - Front Office Football Central (https://forumsold.operationsports.com/fofc/fofc/showthread.php?t=99588)

Once these files are done, creating files for a later year isn't *that* much work. It's enough work that I'm not going to create 100+ of these if no one wants them, but quick enough that I wouldn't mind creating them for anyone with a specific request.

Passacaglia
07-16-2025, 07:08 AM
Moving on from QBs. For those who don't know FOF9 file structure, there's two files for players -- QBs are in one file, since they have more attributes, and all the other players are in the other file. So...here's the rest of the positions.

When calculating AV/G for QBs, I made a non-started game equal to 0.1 of a game. That felt right for QB in terms of getting numbers how they should be, and of what made sense -- a QB who's coming off the bench might be mop-up duty, might be coming in at some random point in the game due to injury, might be a kick holder or something weird like that. For other positions, I'm thinking they may be subbing in often as a backup, maybe a situational player, so I upped the value of a non-started game to 0.5.

https://i.imgur.com/7ar2qmy.png

This is all players who started 1960 or later, but I couldn't resist adding Jim Brown to compare with the rest, even though he started in 1957. I fudged the numbers a little and assumed his first three seasons had a similar AV to the rest of his career. This might shortchange him a little. He had two MVP seasons in those first three years, third place in another. Despite that, his AV/G of 1.49 absolutely kills everyone else -- the next highest are Billy Sims at 1.07 and Lawrence Taylor at 1.05. All these other really amazing players are bunched around 1, and he's at almost 1.5. Insane.

I feel like longevity may be overvalued here, but that probably works when looking at the top. The only current players on here are Aaron Donald and Bobby Wagner. I'm fine with that -- you can't really talk about how a player compares with all-time greats until their careers are done. We talked about Billy Sims being #2 in AV/G, but he doesn't even make the top 25 due to longevity. Does he belong? He played 5 seasons, so it's not like he just got hot for a bit or something. But it's still hard to create a top players of all-time list and say he's better than Lawrence Taylor. I dunno.

KingZal
07-17-2025, 07:18 AM
Right now, I'm making two big files for 1920, for use in my dynasty here:

1920 Racine Street Cardinals -- A No APFA FOF9 Dynasty - Front Office Football Central (https://forumsold.operationsports.com/fofc/fofc/showthread.php?t=99588)

Once these files are done, creating files for a later year isn't *that* much work. It's enough work that I'm not going to create 100+ of these if no one wants them, but quick enough that I wouldn't mind creating them for anyone with a specific request.
I was actually just thinking about that dynasty. I'm looking forward to seeing those files done.

Passacaglia
07-17-2025, 08:34 AM
I was actually just thinking about that dynasty. I'm looking forward to seeing those files done.

Me too! This is pretty much transitioning now from using AV to getting the files ready. I'm doing a couple things now:

1. Looking for dupes. There's some oddities in the data I have. In the large data pull I ran from PFR, there's an "age" field for each player's season. I've been using that instead of finding the birthdate, at least for now. Jason Campbell, for example, gets his age screwed up a few times because his birthday is December 31. And some players who had different positions listed in different seasons snuck through my attempt to make sure a player is only listed at one position. I had to manually go through about 80 players from 1920-1959 to find out if they were the same player listed twice, or two different players with the same name. Weird trivia -- there have been only two NFL players named Bob Sullivan, and both of them played in 1948. Same with the name John Perko, two players, but both played in 1946.

2. Filling blank positions. A lot of early players don't have a position listed in the big data pull. At first, I just put in a random position, but now I'm running a python script that looks at the PFR and wikipedia page for that player and tries to find a position. Also, the early years are heavily weighted toward offense, likely because they were all two-way players listed at just their offensive position. I'm going through players listed with a / (something like LT/LDT) and deciding that if it's close overall, I'll go with the defensive position to help even it out. It probably won't even it out, but it will help.

https://i.imgur.com/Z7S0EZm.png

Next steps after that:

1. Look at RB and FB. It will be a waste for Jim Brown to be listed at FB, and probably a lot of other players too. The FOF instructions say that 2 is the top value that can be assigned to FB. I've found that not to be the case, that you *can* give a FB a rating higher than 2, but maybe the point is that it doesn't make him any better than if he were a 2. My plan is to take all the FBs that I've rated higher than 2 and just change their position to RB.

2. Fill attributes. I don't have great ideas here yet. My current plan is to just ask AI something like "hey give me the top 50 QBs in terms of touch" and go from there. I don't think I'll get a solution where I can have a rating for every QB, but I figure if I can fill in some noted outliers, a little bit will go a long way.

3. Fill in fake players. The early years are pretty light overall, and especially light in defense and QB -- I only have 10 or 11 in 1920 now. I'm fine rolling with that, and even though I'm using 32 teams, I'm okay with only 10 or 11 having "good" QBs to start. But I'll need to add about 170 QBs rated 10 (below replacement quality), otherwise the game will start generating fake players who will be good. I'm also toying with the idea of having QBs who joined the league throughout the 20s just start in 1920, but then that means there's none left to be drafted. Maybe I'll just have some of them move their start year up, and some stay back.

korme
07-18-2025, 10:56 AM
If you're looking for opinions on 3, Pass, I'd say I would prefer you keep the years entered as close to real life as possible, despite the challenges of depth at QB. For instance, add those below replacement quality guys if it means there are 10 good QBs to start, and even if a few drafts are light on QB, users will just know that's the beginning challenges of a 1920's start.

Passacaglia
07-19-2025, 09:07 PM
Thanks Shorty! I think that makes a lot of sense, too. In some ways, it might not even be a challenge, but a benefit knowing you just have to get one of the 10 good QBs. But I guess you might not get the chance.

On the other hand, I'm looking at a guy like George Munns.

George Munns Pro Football Stats, Position, College, Draft, Transactions (https://www.profootballarchives.com/players/m/munn00400.html)

This guy's first season in the NFL was in 1921, for the Cincinnati Celts. I don't know what he did in 1920 -- although the Cincinnati Celts weren't in the NFL in 1920, but they did have a team, so if he was on the team, he wouldn't have been "in the NFL" yet. In 1919, he played on the Akron Pros, who joined the NFL in 1920. He feels like a guy I could say started in 1920. He may be the only one like that, but there are other guys like Ralph Jones, who played in 1 game in 1921, at the age of 41. Probably wouldn't be appropriate to put him in 1920, but wouldn't be crazy to just get him in the league at 1920 either.

I'm with you, though -- I'd rather just stick to what's here and roll with it. I look at guys like Munns and think about fiddling, but there's a question of how much individual research to do, too.

Meanwhile, I'm getting more bothered by the uneven distribution between offense and defense. It'd be one thing if there were less players overall, but it feels wrong to have 73 players just at RB and FB, when there are 74 players on defense total. So some of those 73 won't even get to start, while I'm way short on defense. I'd love ideas here if anyone has any.

KingZal
07-20-2025, 05:43 PM
Is that 74 defensive players for 1920 alone, or the entire decade? I like the idea of generating filler quarterbacks and just having to run with less talent in a primitive era, but the thought of doing that with defense gives me pause.

I think you should try that regardless and see how the game plays, or at least what the stats look like over time. I'm okay with having weaker, wonky stats that far back in a dynasty - in fact, I've kicked around the idea of neutering 20th century quarterbacks to simulate the offensive explosion of the 21st century - but I imagine that it might not be fun to play a universe where the early pickings (on one side of the ball) are so slim.

JonInMiddleGA
07-20-2025, 05:48 PM
Meanwhile, I'm getting more bothered by the uneven distribution between offense and defense. It'd be one thing if there were less players overall, but it feels wrong to have 73 players just at RB and FB, when there are 74 players on defense total. So some of those 73 won't even get to start, while I'm way short on defense. I'd love ideas here if anyone has any.

I'm assuming this is an issue at least in part because of 2-way players?

Passacaglia
07-21-2025, 09:44 AM
Is that 74 defensive players for 1920 alone, or the entire decade? I like the idea of generating filler quarterbacks and just having to run with less talent in a primitive era, but the thought of doing that with defense gives me pause.

I think you should try that regardless and see how the game plays, or at least what the stats look like over time. I'm okay with having weaker, wonky stats that far back in a dynasty - in fact, I've kicked around the idea of neutering 20th century quarterbacks to simulate the offensive explosion of the 21st century - but I imagine that it might not be fun to play a universe where the early pickings (on one side of the ball) are so slim.

That's just for 1920. If you look at post #31, that's got the breakdown by position. The positions are on top, but might be hard to spot. When the league starts in 1920, there'd be 247 players on offense, and 74 on defense. Not so bad, but it gets worse as time goes on. In 1921, we add 171 on offense and 57 on defense. So now we're looking at 418 on offense to 131 on defense (it's actually worse than this because this is just the players file, QBs are not included).

My plan is to go through some of the best players in the league, and do some research on whether or not they were best known for offense or defense -- probably they were just super good at both, but we'll see. Then I'll try to get some of the guys rated 1 or 2 and split them, figuring no one will care.

I've been thinking about nerfing past eras like you mentioned, too. My thought has been that since AV is not era-adjusted, using it will do a pretty good job of that for me. However, since I'm only using AV for players who started in 1960 or later, it won't really be nerfing the era from 1920-1959. I'm hoping that the ranking list from that era will effectively do it, by not having many QBs ranked highly. Here's the breakdown of ratings by decade for QBs:

https://i.imgur.com/HREQ5gN.png

I feel pretty good about that. We've got 8 guys rated 8 or 9 in the 1980s or later, and 4 before that. The one 9 from the 1930s is Dutch Clark (https://en.wikipedia.org/wiki/Dutch_Clark), who is actually listed as RB in the rankings, but I changed him to QB because he looks like a great dual threat. I like that there are way more players rated 4+ later on, too. Maybe some of that is due to the fact that I'm using percentages and there are more players in later years, but I think this will work well.

Passacaglia
07-21-2025, 10:02 AM
I'm assuming this is an issue at least in part because of 2-way players?

Exactly -- most guys are listed as something like End or Back or Tackle, which was probably meant to cover both their offensive and defensive position. But even guys who are listed as RB or QB that feel definitively offensive also would have played defense. Here's a breakdown of positions I have currently for 1920:

https://i.imgur.com/wapLEy3.png

When translating these to modern/FOF positions, these are all things I interpreted as offense. LE/RE are WR, so I randomly assigned them one of FL or SE. BB is FB. LH, RH, TB, and WB are RB.

Some of the blanks likely get filled in during later seasons. For each player, I took the most common position he was listed at, so if one of those blanks plays in a later season and gets listed at a position, it gets listed.

I still haven't entered in the results of the script I ran to check wikipedia for positions yet. That will help with the blanks, but probably not the offense/defense issue, I assume they'll all get position names that sound like they play offense.

I think I'm going to have to just take some of these players and randomly put them on defense. If they're low-rated, they're probably not special enough that anyone is going to froth at the mouth "hey that guy's a RB!" if I put him at LB -- it's more important to make sure all these guys are in the game and playing, instead of having them as backups on offense while fake players play defense.

Passacaglia
07-22-2025, 09:32 AM
Okay, I think I have a solution to the offense/defense issue.

I made a list of all the possible positions. There's 354, because there are things like G, LG, RG, LG/RG, RG/LG, and BB-TB-WB-FB, and so on. Each position gets a score from 0 to 1 based on how "offense" it is:

https://i.imgur.com/vsnwqSw.png

Most of your normal positions are all 1 or 0, but E and B are 0.5 since they are likely two-way players. Not too fancy -- I just eyeballed each position and gave it either 0, 0.25, 0.5, 0.75, or 1. FWIW BB-TB-WB-FB is 0.5, RDT/RT/MG
is 0.25, FB-BB-WB is 0.75. I'm assuming those don't come up too often so I'm not sweating it.

Next step is to create an "offensive percentage" for each player's career. For each season, take their total offensive score from above, and divide by total number of seasons.

Then, for each cohort of players based on their first season in the league, put them in order based on offensive percentage, and make the top half offense, and the top half defense. This part was a bit funky -- for example in 1920, 199 of the 350 players had were 100%. I could have done something like use total of number of seasons to figure out which 175 were "more" 100%, but this seemed like a good natural break, and a split of 199-151 isn't so bad.

https://i.imgur.com/nCZ6Nr3.png

Not the 50/50 that I wanted, but I'll take it.

The issue I'm having now is that when I use AI to assign positions, what's happening is that all the E are on defense -- so there are no TEs, 1 FL, 1 SE, and a ton of DEs. I'm going to look into that, and maybe experiment with refining the T position to have a 0.75 offensive score and see what that does.

Passacaglia
07-22-2025, 09:47 AM
Also, I wanted to look into this. The most offensive player assigned to defense is https://en.wikipedia.org/wiki/Pettis_Norman , who played 11 seasons at TE, but 1 season at RE, but I guess 1962 needed some defense. And the most defensive player assigned to offense is Dale Hellestrae - Wikipedia (https://en.wikipedia.org/wiki/Dale_Hellestrae) , who played 14 seasons as a long snapper after a rookie year at Tackle.

I'm mostly fine with Hellestrae, but Pettis Norman is a bit of a shame. Maybe there needs to be some thresholds based on the actual percentage instead of going completely by rank.

Passacaglia
07-23-2025, 08:51 AM
Some good news! I found some stats NFL Stats (https://www.jt-sw.com/football/pro/stats.nsf) that go back to 1920. I've put the stats on this site for 1920-1959 in passing, rushing, receiving, interceptions, punting, and kicking into csv files. That should be useful to help me identify who really belongs in each specific position for guys listed as Back or End.

Looking at the passing stats, there are 66 players that aren't included in my file. Some of them are nickname-based, like these stats have Hopalong Cassady, and I have him in it as Howard Cassady, and some are abbreviation based -- this site calls him Y. A. Tittle and my file calls him Y.A. Tittle.

Next steps with these stats:

1. Find any names of players I don't have and add them in.
2. Get these players ranked by number of pass attempts, rush attempts, receptions, interceptions, and kicks. Whatever that player's best rank is, that's his position. If he doesn't rank in anything, he's probably defense.

Passacaglia
07-24-2025, 10:22 PM
So I was working on this stuff for a while, then switched to my work, and it looked exactly the same -- a spreadsheet with a bunch of data. I guess that says something about something.

Anyway, things are looking good! I only added three players to my data:

Eagle Feather - Wikipedia (https://en.wikipedia.org/wiki/Eagle_Feather)

Arrowhead (American football - Wikipedia (https://en.wikipedia.org/wiki/Arrowhead_(American_football))

And a guy who I can't find any other info on other than that his name is "Seymour" and that he had 1 reception for 3 yards for the Cardinals in 1940.

I feel like I have a good read on who to label as QBs though!

https://i.imgur.com/fCDRk3C.png

The first column for each player here is their best rank in terms of pass attempts, 2nd column is their best rank in rush attempts, 3rd column is best rank in receptions, 4th column is interceptions. I'm using pass attempts here because I'm not trying to determine how good they are as a QB, I'm trying to determine how often they were used like one. This gives me 30 QBs in 1920, and 19 that will come in for 1921.

Passacaglia
07-25-2025, 09:09 AM
One thing I should have noted is that since this doesn't include kicking and punting yet, some of these players who look like QBs now might end up looking like Ks or Ps when I'm done. There are punt return stats too, but since that's not a position on its own, I'm only going to use them for help determining the punt return attribute.

Biggest surprise is probably Jim Thorpe. I guess that's bound to happen, since he's the only player here whose name I knew before doing this. I always thought he was more of a running back, but in 1920, he threw 24 times, 4th most in the league, and ran only 18 times. Some of this may be age-related -- he was 33 in 1920, and maybe if the league had started earlier, we would have seen him crack the top 3 in rushing attempts. I'm open to changing him to RB if people think that makes sense.

Passacaglia
07-25-2025, 09:50 AM
So this process is taking longer than it should because of the matching for lookups. Neither pro football reference nor this jt-sw are consistent about using nicknames vs. real names, or there's just disagreement on spelling. Stuff like Charley Trippi vs. Charlie Trippi. Or Curley Morrison -- when that doesn't match, my first assumption is the other site has him listed as Curly, but no, he's Fred. My favorite has to be a guy listed as Dick Halladay on that site, but when you search wikipedia, there's no Dick or Richard or Richie Halladay -- that's because wikipedia and pro football reference list him as Death Halladay - Wikipedia (https://en.wikipedia.org/wiki/Death_Halladay) -- oh, and his name is actually Robert. A lot of time spent, but it will all be worth it if I can get Death Halladay on my FOF team.

korme
07-25-2025, 02:21 PM
Loving this project, Pass. Keep up the good work.

Passacaglia
07-26-2025, 10:15 AM
Thanks Shorty! I know there may not be a lot of interesting things to say, but I appreciate the chatting about it!

Here's the process I've got going now:

I took the old stats I found, and created the rankings that pretty much look like what I had above. I added kicking and punting stats, too. Then, I applied the following rules in order to all players from 1920-1959 (I'm assuming by 1960 this stuff get less murky):

1. If you were Top 10 in pass attempts in any season, you're a QB. This may have weirdness given that the number of teams ranges from 8 to 22 during this period, but at this point, I don't know which season I'm looking at anyway.
2. If you were Top 30 in rushes, receptions, or interceptions, you're either a RB, WR, or Defense, depending on which is lowest. This rule is in place to prevent guys who played a real position and kicked from being assigned as a Kicker or Punter.
3. If you weren't in the Top 15 in Kicking or Punting, it doesn't count. This rule is in place to prevent guys who are OL or DL and don't have any stats from being assigned Kicker or Punter just because they did it a few times.
4. If you haven't been assigned a position yet, you get assigned QB, RB, FL/SE, DEF, K, or P based on whichever ranking is lowest.
5. If you've been assigned RB but your position is listed in pro football reference most often as FB, you get assigned FB.
6. If you're assigned DEF or NONE, we take the position that you were listed at most in the pro football reference data and assign you something that makes sense.

https://i.imgur.com/3TehrT9.png

7. At this point, almost everyone has a position or a group of positions. For each year, the players are placed in order of how flexible they are -- players who can be one position first, then two, and so on, ending with guys who are 0 -- no position listed in pro football reference ever, and no stats to indicate any position either. They can be anything.

8. We use a python script to assign everyone who can be multiple positions to whatever position they can be that's most needed. Here's the distribution I'm looking for:

https://i.imgur.com/BCrhY7Z.png

I've done steps 1 through 7, and am now working on Step 8. There's a lot to pick apart here, so feedback is welcome!

Passacaglia
07-27-2025, 10:13 AM
1. If you were Top 10 in pass attempts in any season, you're a QB. This may have weirdness given that the number of teams ranges from 8 to 22 during this period, but at this point, I don't know which season I'm looking at anyway.
2. If you were Top 30 in rushes, receptions, or interceptions, you're either a RB, WR, or Defense, depending on which is lowest. This rule is in place to prevent guys who played a real position and kicked from being assigned as a Kicker or Punter.
3. If you weren't in the Top 15 in Kicking or Punting, it doesn't count. This rule is in place to prevent guys who are OL or DL and don't have any stats from being assigned Kicker or Punter just because they did it a few times.
4. If you haven't been assigned a position yet, you get assigned QB, RB, FL/SE, DEF, K, or P based on whichever ranking is lowest.
5. If you've been assigned RB but your position is listed in pro football reference most often as FB, you get assigned FB.
6. If you're assigned DEF or NONE, we take the position that you were listed at most in the pro football reference data and assign you something that makes sense.


I've made some changes to these rules, since I was getting too many players locked in at QB/RB/WR because they had some stats in a category but it clearly was not their primary position.

1. If your best stat was interceptions, you're defense.
2. If you were in the top 20 in passing, rushing, or receiving, you get a position based on the smallest of these.
3. If you don't have a position yet and were in the top 15 for kicking or punting, you get a position based on that.
4. If you don't have a position yet, you get NONE.

Then the usual 5 and 6 from before:

5. If you've been assigned RB but your position is listed in pro football reference most often as FB, you get assigned FB.
6. If you're assigned DEF or NONE, we take the position that you were listed at most in the pro football reference data and assign you something that makes sense.

Step 6 uses the same lookup tables as before, I might have made small modifications to get more ILBs in. If I recall, the only change I made was that I allowed guys listed by pro football reference as RB to play LB as well as DB.

https://i.imgur.com/XvKZ7q5.png

Looks like I made too many cuts to RB and WR. There's no reason those should be below target since those are the only guys we have stats for.

I also suspect that the script is choosing LG over RG, LT over RT, LDE, over RDE etc, whenever there is a tie. Not a huge deal, but I think it should choose randomly from the available positions instead of just going down the list.

I'm also considering that maybe I shouldn't bother assigning players to special teams. What's the point of having a player in the game file if I've changed his position to LS, and to a lesser extent P or K? I'm probably going to need to generate a good amount of fake players in those positions anyway, so maybe I should cut my losses and put them somewhere else? I guess that's why I cut kicking and punting stats already -- not because I was getting too many Ks and Ps, but if a guy is a real football player I want him included that way instead of as a K or P.

korme
07-27-2025, 11:28 AM
Thanks Shorty! I know there may not be a lot of interesting things to say, but I appreciate the chatting about it!



As someone who probably gets more enjoyment out of modding OOTP's master csv files, I completely understand :lol:

Passacaglia
07-28-2025, 03:31 PM
As someone who probably gets more enjoyment out of modding OOTP's master csv files, I completely understand :lol:

Nice! It's weird when I tell my wife I'm playing FOF, but what I actually have up is spreadsheets and a command prompt window. It's going to be weird when/if I'm done and I'm actually just playing FOF. Hopefully, if there's an FOF 10, I'll be able to use most of this work for that.

Passacaglia
07-30-2025, 02:34 PM
Update:

I started rethinking my distribution be position. At the time I made these, I was concerned with making sure everyone in the league gets a starter ASAP -- but I need to think more long-term than that, since this distribution is going to be applied for 40 years. Instead of trying to make an equal weight of starters, I want to make an equal weight of roster spots. So now I have:

https://i.imgur.com/TuSDlx7.png

Note that here I've decided not to include any LS in here. The game will make a bunch of fake ones, or maybe I'll add a bunch of fake names to the file. I don't think it makes sense to shortchange myself in other positions so that I can fill up LS.

For K and P, the weights are lower now than before, since each of them is 1 out of 52 (instead of 53 since we're taking out LS), instead of 1 out of like 27 or 28 (instead of 24, since I added a bit more for 3rd WR, nickel CB, and 2nd TE). This allows me to keep the position in, not have as many as I had before, and it makes it easier to only use players that make sense (i.e. had kicking stats).

New rules for assigning players to a position:

Your best rank in each of these categories needs to be in the Top X to count at all:

Passing -- 33
Rushing -- 60
Receiving -- 68
Kicking -- 32

For punting and defense, if you have punted even once, or had an interception, you're considered for that category.

Then, we take your best rank between passing, rushing, kicking, and defense. If your best rank is passing, you're a QB. If your best rank is rushing, you're an RB or FB (defaults to RB, but if pro football reference thinks you're a FB, then you're a FB). If your best rank is receiving, you're a FL or SE. If your best rank is defense, you're defense. If you still don't have a position, and have a kicking or punting stat, we take your best of those (also, if you ever led the league in kicking or punting, you get that as your position no matter what other stats you have).

Here's what I've got:

https://i.imgur.com/bkEnFXq.png

Looking VERY good.

I got a handful extra QBs and RBs than I thought I would because in some years, there are just a lot of DBs already. Based on the limiting numbers I chose for X above, I figured I would not get anyone assigned to QB or RB unless they had the stats for it. We're talking 2 QBs and 10 RBs over 40 years, and it actually does balance things out for that year, so I'm fine with it.

TEs are a bit lower than I'd like -- coming in at 5.06% when I wanted 6.73%. The only thing I can think of that makes sense is to have some of those guys with catches play TE instead of WR. But it's tricky to decide who -- I don't think I have a good way to automate that without risking putting someone who obviously should be a WR at TE accidentally. Pretty much everyone who pro football reference calls an End, who doesn't have any catches, or interceptions, is ending up at TE. So while this bugs me a little, I feel like tinkering is only going to make it worse. We may end up with a situation where those TEs are also worse overall than other positions, but at this moment, I'm not seeing a great way to fix it.

Currently we're low on RBs and high on FBs. I'm still planning to take any FB rated higher than 2 and switch them to RB, so that should help.

After that RB/FB switch, I'm a little shocked to say it, but this may actually be a usable file?

Passacaglia
07-31-2025, 11:36 AM
TEs are a bit lower than I'd like -- coming in at 5.06% when I wanted 6.73%. The only thing I can think of that makes sense is to have some of those guys with catches play TE instead of WR. But it's tricky to decide who -- I don't think I have a good way to automate that without risking putting someone who obviously should be a WR at TE accidentally. Pretty much everyone who pro football reference calls an End, who doesn't have any catches, or interceptions, is ending up at TE. So while this bugs me a little, I feel like tinkering is only going to make it worse. We may end up with a situation where those TEs are also worse overall than other positions, but at this moment, I'm not seeing a great way to fix it.


I really felt like I was just going to leave it, but in the back of my head, I knew that if I ruminated on it for a while, it would bug me too much and I'd want to tinker. I'm deciding to allocate players with receiving stats to either TE, FL, or SE instead of just FL or SE. Right now, I'm getting more TEs than I wanted and less WRs, but I feel like that may be a better fit for this period anyway.


Your best rank in each of these categories needs to be in the Top X to count at all:

Passing -- 33
Rushing -- 60
Receiving -- 68
Kicking -- 32

I've also reworked this. Instead of making sure a player is ranked in the Top X for that season, I'm choosing a number that's different for each season, based on the number of players in the file that year. For example, in 1920, there are 351 players in the file. Old method, you just got your passing stat included if you were in the top 33. But now, X is equal to the number of total players times 0.23 for passing, and something like 0.4 for rushing. So in 1920, your passing counts if you're in the top 80, but in 1928, where there's only 58 players, you have to be in the top 13. That's not how many QBs get in the file -- that number is lower, because some of these guys end up playing other positions due to another stat being better. Using this method, I ended up included your stats in receiving, punting, and kicking no matter what. But at least, this way, random guys who have 1-2 catches but positions in pro football reference of linemen or something end up as TEs instead of WRs.

Passacaglia
07-31-2025, 04:58 PM
We're circling in here:

https://i.imgur.com/0lM5TM9.png

TEs, FLs, SEs are all right where I want them now. G and DT are high, and LB and DB are low because of that, but that seems natural for the time. I adjusted my vlookups so that players listed as RB, WB, or HB could play either LB or DB, and that evened things out -- before DBs were about at target, but LBs were way low. I don't think it's appropriate to switch someone who is listed at OL or DL to being an LB, so definitely no adjustments are going to be made here. Still need to switch some of the FBs to RB, but I think when I do that, I'm going to be fine with however it turns out -- if there's still too many FBs, I'll say that fits with the time, and if there's too many RBs, I'll say they are more valuable anyway.

Passacaglia
07-31-2025, 09:38 PM
Pretty good success on the RB/FB switch! After switching everyone with a rating higher than 2 from RB to FB, we're now at 7.05% RBs and 0.63% FBs. A little low on FBs, but that's fine -- that's more appropriate to how FOF works anyway.

Also, I just want to get this written down somewhere. As I'm working on filling out the CSV files, I got all confused by the fact that there are no QBs in 1959. At first I thought I wasn't getting enough rows or something, but I think it's happening because I only pulled data to 1959, and guys who entered the league in that year might not have charted enough statistics to be considered a QB by this model until the 1960s.

My table has three players who entered the league in 1959 that pro football reference calls a QB -- Eagle Day, Buddy Humphrey, and Bob Ptacek. Day and Ptacek ended up in the CFL pretty quickly. Day's wikipedia page has references to him punting, and Ptacek's mentions some defense. Only Humphrey seems likely to be a QB of the three. For now, I'll do a quick and dirty fix of changing Humphrey to QB, and look into something better later -- this way I can get some rough-draft CSV files out for anyone who wants to play around with them.

Passacaglia
08-05-2025, 09:11 AM
FILES!!!!

Here's what I've got, I'd love for anyone to give them a try and let me know what they think!

1920_quarterbacks.csv - Google Drive (https://drive.google.com/file/d/1KhxWRiSIcUCtTzFhs3SDZ5KOVziCwta9/view?usp=sharing)
1920_players.csv - Google Drive (https://drive.google.com/file/d/1kKl9N0Ow2i9HyXJhCFt2ldLujRX-bWNs/view?usp=sharing)
1920_info.csv - Google Drive (https://drive.google.com/file/d/1t0mjxSEuWQOdHNn8cbCOm-PXLIhQ3mN9/view?usp=sharing)

The first link is QBs, second link is players, and third link is info. Download all three of these into C:\Program Files (x86)\Steam\steamapps\common\Front Office Football Nine\custom_example (unless you downloaded FOF9 somewhere else).

The third link, info, is set up so that it will play FOF9 "normal" NFL-style, with the way things are set up for modern-day. It's not needed if you want to create your own. I did it this way for a couple reasons:

1. It accesses the league_info and default_teams files in a way that people who haven't made changes to those files can still use this.
2. The game is much more stable this way -- I don't know why, but when I am using one of the already existing league structures, I can run multiple seasons with no fear of crashing, but when it's a structure I've created, it crashes a lot. It's usually okay as long I save often, but if you're new to this, it will be much less frustration.

Point is, you'll see 1920 players, but modern teams. If the franchise names are stupid things like Arizona Pioneers, go into C:\Program Files (x86)\Steam\steamapps\common\Front Office Football Nine\default_data, find the default_teams.csv file, look for rows with 32_8_17 in the first column, and change the names to what you want (then exit the game and open it again).

If you don't want to see modern teams, and want some other structure, you'll need to change default_teams.csv, league_info.csv, and the 1920_info.csv file we just put into that custom example folder. Happy to answer questions or help out on that if anyone wants to, here or over email.

File details:

This has all players I've been able to find who entered the league from 1920 to 1959. Once 1960 starts, it turns fictional. Adding players from 1960 to 2024 is on the list of additions.

We don't have enough players to fill an entire 32-team league right away. It depends on your league size, I guess, how close it is to full, or how long it takes to be full. The files itself has several players named Fake Fakerson who show up. It's annoying, but it's a quick way to point out "this guy is not a real player" and by including them, I'm able to make sure they're all bad -- if I didn't have these guys in, the game would add its own players, and they would be good, messing up the league. If people think Fake Fakerson is a stupid name, or think they shouldn't all have the same name, I can change it. In my test sim, by 1928, with 32 teams in the league, my team was down to like 10 Fake Fakersons on its roster, and all the starters were real.

Players don't have teams listed. It doesn't make much sense to, since there are 14 teams in the league in 1920, and I have this set up with the 32 modern franchises in the current setup. I do have team information in my development file, but I don't know how accurate it is. If anyone is interested in a 14-team setup with players on their real teams, we can talk. Until then, I would recommend only playing this with a preference draft or a 53-round full draft.

Height and Weight -- I tried just setting this to 0 or -1, and everyone came up with the same height and weight, something like 6'0" and 320 pounds. Weight is kind of important when it comes to switching positions. In nilodor's file, I think he used real weights, which messed things up, because a 1960s DT wouldn't weigh enough to switch from LDT to RDT. So what I did was took the average height and weight for each position from the example files in the game, and assigned it to all these players. So all QBs are 6'2 3/8" and 217 pounds, and so on. Long-term goal would be to pull the actual player's weight, but instead of using it (which would probably make him unable to change positions), I'm going to normalize it -- so if a guy was heavy for his position in the year he played, I'll make him similarly heavy compared to the average for that position in the file. For now, this seems good enough.

Handsize and armlength -- These are both set to -1 in the files. When the game loads that, it gives each player a different value for these, which I assume is reasonable? So I'm leaving it like that.

Birthmonth and Birthday -- Right now, everyone is born January 1. Long term goal of pulling exact birthdate info from Wikipedia or pro football reference at some point.

Birthyear. The data that I pulled from pro football reference gave an age for every season a player played. It's not perfectly accurate -- I saw at least one instance where a 12/31 birthday screwed up the age. But until I pull birthdate data, I'm just using their first season minus their age as their birth year.

Birthcity and college -- Not included yet, but on the list to add in at some point. For now, everyone was born in Another Country, ZZ and went to No College.

Round drafted -- Not included yet. This only applies to players who are in the league as 1920 starts -- everyone else doesn't need a value here, because they will get drafted when they enter the league, and the game will use that. None of these 1920 guys were drafted. If anyone is interested in leagues that start other years, it may make sense to include that info eventually, but probably doesn't make sense until after players from 1960-2024 are added though.

Original Team -- Not included. Adding this will probably be more trouble than it's worth, but maybe if there's a good reason we could do it.

Experience -- In this file, everyone is a rookie. That's appropriate in a way since the league has just started, but not appropriate in that some players have a ton of experience and some are just starting their careers. I suppose we could try to figure out how to make experience based on when they started playing pro football, but that seems like it would require manual work. My hope is the fact that ages are pretty good means it will be fine.

Overall Rating -- The game wants a rating from 0-9 here. I've talked about the work I've done trying to make the distribution similar to what's in the example files, and this should reflect that. I did make everyone at least a 1, which is backup quality. I didn't have anyone who was a real player listed as a 0, which is replacement quality, because I want all the real players to be better than the fake players, which have a 10 rating, below replacement quality (the help files imply he will only be placed if he is needed).

Attributes -- The game has a bunch of attributes, a list for QBs and a list for players. These are currently set to -1, which means his attribute will be determined by his overall rating. It's on my list to set some of these, since that will give players personality besides how good they are.


There's a lot to do, but this file will is bare-bones good, since it will let you start with 1920 players, and play for a while with minimal weirdness. There's a lot to do, but I think you'll be able to start a reasonable career. I'm taking requests on what should be added next -- either things I've mentioned, or other ideas people have (I didn't mention a coaches file yet, but that's also on my list).

Passacaglia
08-05-2025, 09:24 AM
Also, if you don't know how to use these...

When you start a new game, leave "use Front Office Football file" unchecked and hit continue. Then, make sure "use your own player file set" is checked, then click "choose custom file set" and select 1920_info. Click continue, and more options should come up. Like I said before, you probably want preference or Full 53-round draft, and you probably don't want to use historic quarterbacks. The rest of the options are up to you.

KingZal
10-16-2025, 03:02 PM
Pass, sorry for the (very) belated response but I did get a chance to test your files. I've mainly been thinking about the fake players and there seem to be a lot, even after a few decades. On one hand, they rarely (if ever) win awards or break records, which is good - and I like seeing so many players represented from an overlooked period of football history.

On the other hand, the the sheer number of fakes in the league over a long period of time is distracting. For future files, would you consider generating fake names with an asterisk at the end? For me it'd be a little less immersion breaking while still allowing me to notice the real players in there - some real players, such as Zed Coston for example, end up drafted way far down with the fakes.

Beyond that, if you come up with normalized height/weights and bring in Super Bowl era players, I can definitely see myself playing these files long term. It's very cool seeing the earliest hall of famers represented in game - one of the unexpected upsides of having a lot of "fakes" is that real players like Cal Hubbard and George Halas end up rising to the top.

Passacaglia
10-17-2025, 10:08 AM
No problem, a late reply is better than none!

I don't think I ever tested the file out for decades -- I'm pretty sure I never went out further than a few years. I hoped the problem would resolve itself eventually, as more players join, but I could totally see that due to record-keeping and two-way players, you wouldn't really see fake playes go away until the 60s or even 70s.

If I recall, I tried to make sure that everyone given a name was at least a tier above everyone who was fake, and that all the fakes were something like replacement level. So I would have expected none of them to be any good at all, but I could imagine if you go out decades, something weird with them could happen.

I think fake names with an asterisk is a great idea. I have a later step to add pictures in, which will help. Although I assume there will be plenty of real players I don't have pictures for, so that might make them appear fake at first.

I'm glad you're liking it! I thought I had some normalized heights and weights, but I guess not. I do feel like those are important, because they affect your ability to switch a player's positions. I'm surprised about Super Bowl era players -- how many seasons do you go into a career? Obviously I had a goal to add them in, but I figured I'd have to play 40 seasons to make it necessary, so that could be a later step. Agree on seeing the real players be good in the league -- from what I remember, without the fakes, the game adds its own players, and they end up taking over.

Passacaglia
10-17-2025, 10:23 PM
if you come up with normalized height/weights

Out of curiosity, what did you mean by normalizing height and weight? My thought was if a player was above average in height or weight for his position, I would try to make him similarly above average compared to the game's average height or weight for his position. Maybe I'm just not as into this as I was before, but that seems like there wouldn't be much payoff in doing that. Do you know if it really changes anything in the way the game is played?

KingZal
10-20-2025, 11:29 AM
Out of curiosity, what did you mean by normalizing height and weight? My thought was if a player was above average in height or weight for his position, I would try to make him similarly above average compared to the game's average height or weight for his position. Maybe I'm just not as into this as I was before, but that seems like there wouldn't be much payoff in doing that. Do you know if it really changes anything in the way the game is played?
I am not an expert in FOF's inner workings by any means and have not seen how the game plays with autogenerated players (in comparison to the player files I've been using), but my understanding from the docs is that height and weight make a difference in how well a player performs. The further a player is from the "ideal" height and weight for their position, the worse they play.

I know having real player sizes causes issues with regards to position changes, but I personally like having a variety in player sizes one way or another. Seeing everybody at the same height and weight is a little immersion breaking IMO

Passacaglia
11-07-2025, 09:10 AM
I am not an expert in FOF's inner workings by any means and have not seen how the game plays with autogenerated players (in comparison to the player files I've been using), but my understanding from the docs is that height and weight make a difference in how well a player performs. The further a player is from the "ideal" height and weight for their position, the worse they play.

I know having real player sizes causes issues with regards to position changes, but I personally like having a variety in player sizes one way or another. Seeing everybody at the same height and weight is a little immersion breaking IMO

That makes sense.

I'm trying to do this, but I've been having a lot of trouble getting AI to create a python script that will scrape wikipedia or pro football reference to get this stuff. I was able to scrape PFR to get the AV stat, but that's because you can get tables that include it on the site's search feature, but for height and weight you have to go to the individual page for that player, and the URL isn't necessarily easy to come up with based on the name.

I found this scraper, pfyscraper/pfr_scraper.py at main · NossaGTS/pfyscraper · GitHub (https://github.com/NossaGTS/pfyscraper/blob/main/pfr_scraper.py) that claims to get height and weight, and hopefully this will get me what I need. It doesn't get college or birth city, but I'm hoping I can find another scraper to get that, too.

Passacaglia
11-07-2025, 09:21 AM
Pass, sorry for the (very) belated response but I did get a chance to test your files. I've mainly been thinking about the fake players and there seem to be a lot, even after a few decades. On one hand, they rarely (if ever) win awards or break records, which is good - and I like seeing so many players represented from an overlooked period of football history.

On the other hand, the the sheer number of fakes in the league over a long period of time is distracting. For future files, would you consider generating fake names with an asterisk at the end? For me it'd be a little less immersion breaking while still allowing me to notice the real players in there - some real players, such as Zed Coston for example, end up drafted way far down with the fakes.

Oh also, right now I am working on a 1966 file for my dynasty, but when I finish that, I'll replicate the same process for 1920. Once that's done, everything will all be in place, and any other year will be easier to do.

Before moving on to 1966, I was playing around with the asterisk for 1920. I created some fake names, and put asterisks at the end, and it seemed to work fine. I might try putting the asterisk at the beginning -- my hope there is that when you sort by name, all the fake players will be at the end.


Beyond that, if you come up with normalized height/weights and bring in Super Bowl era players, I can definitely see myself playing these files long term. It's very cool seeing the earliest hall of famers represented in game - one of the unexpected upsides of having a lot of "fakes" is that real players like Cal Hubbard and George Halas end up rising to the top.

Oh it was definitely expected -- without the fake players, the game generates as many players as it thinks it needs, and those are all legit players, with a lot being starter quality, and some being the best in the league.

The number of fake players you need depends on the number of teams in your universe. In 1920, due to smaller roster sizes, two-way players, and missing information, you're probably going to be short no matter what (unless you do 4-8 teams maybe), but if you have 32 teams when there were only 14 teams in the league, it's going to be even worse. My stretch goal is one unified file where you select the year you want, and the number of teams in your universe, and the macro creates the two CSV files for you.

Passacaglia
12-25-2025, 08:49 AM
A Christmas gift from someone who doesn't celebrate it!

fof player generator 1920 2024.7z - Google Drive (https://drive.google.com/file/d/1gYAzJOpSF6c0RRNWxy1i_7ak9FW7YJ5r/view?usp=drive_link)

Version 1.0 of my FOF Player Generator is here. I've used the concepts discussed in this thread to get overall ratings for each player. There's 27,972 players included, from A.B. Brown to Zyon McCollum. I used pro football reference data to get a list of the players, so to be included, you needed to not just be on the roster, not just be on the field, but have done something measurable enough for PFR to notice you. If anyone has another source, or even just a player that should be included but isn't, let me know.

KingZal, heights and weights should look better now. Instead of having a player's real height and weight, this compares their height and weight to the average for their position and year, then adjusts it to normal for FOF -- so if a QB was taller than average in his day, FOF will also see him as taller than average.

The option to create fake players is still in here. They all have real names, but there will be an asterisk before the name (no more Fake Fakerson for them all). Before you click "Assign Teams" you'll want to enter in how many teams will be in your league (so that it knows how many players to add). If you don't want to have any players added, just put 0 here.

You can also enter in the salary cap your league will have. Most leagues have 2248, which was the cap in 2023. But if you go into league_info and xxxx_info and adjust it down to something that would make sense in the past for inflation, you'd put that number here. This file makes it so that each player makes 1/53 of the cap, half salary, half bonus. Contract lengths are determined by how long the player stayed on that team. So for example, if you're starting a league in 1990, Joe Montana will have a 3 year contract, because he stayed with the 49ers for 1990, 1991, and 1992. The idea here is to make it easy for teams to keep good players around as long as they really were around (plus it was easier than trying to find everyone's salary, or come up with something that would value each player based on overallrating and position).

There's a couple columns that can be a pain to fit in after you've generated the players, but not too bad. Since this needs to accommodate a lot of different setups, you need to tell it which number each team has. Once you click "generate players" columns D and G will get populated. Column D includes every team for the year you picked, and Column G includes the original team for every player in the year you picked. You'll need to go into your default_teams file and find the TEAMID (in Column B) that goes with each team. Column G will have some extra stuff based on teams moving -- for example, a Los Angeles Chargers player may have SD as their original team, and you'll probably just want to give SD the same code as Los Angeles Chargers. If you really don't care about what team players are on (like if you're going to do a preference draft or a 53-round draft), you can just put 0 in here for all of these. But you do need to fill them in.

I think that's it? Once you're done, there will be a QBcsv tab and a PLAYERScsv tab. Save the QBcsv tab into a new file called xxxx_quarterbacks.csv and the PLAYERScsv tab into a new file called xxxx_players.csv, put them in C:\Program Files (x86)\Steam\steamapps\common\Front Office Football Nine\custom_example and you should be good to go!

If you're doing all this for the first time, you may need help with setting up a league. If so, let me know. And for those who are experienced with using these, let me know what you think and any improvements you recommend!

Passacaglia
12-25-2025, 09:00 AM
Still taking suggestions too, but things I know that I need to do for sure before I can call this completely done:

1. Set the attribute ratings. These are all still not in here, so there's really no difference from player to player in terms of how they play other than a 0-9 rating. I've got a big spreadsheet with a bunch of stats that I plan to use for that.
2. Checking the distribution. In the files I've made, I feel like there's too many high-quality players. That might not be a huge deal, but worth looking at and getting it to emulate the player files that are included in the game.

KingZal
12-29-2025, 06:05 PM
Thank you Pass, this is great news. Unfortunately I wasn't able to get a universe working with the player file I generated - the message it gives me is: "Player file had incorrect header information. Will continue new universe with fictional player creation." I'm going to keep experimenting with it and see if I can find the issue.

Passacaglia
12-30-2025, 06:54 AM
Thanks for the info! When I get a chance, I'll post a link to the most recent version, maybe that will help.

Passacaglia
12-30-2025, 07:23 AM
Here it is:

https://drive.google.com/file/d/1gYAzJOpSF6c0RRNWxy1i_7ak9FW7YJ5r/view?usp=drive_link

KingZal
12-30-2025, 04:04 PM
Hmm, still getting that same error, albeit for the quarterback file instead. Or maybe both?


I've tested a few things and compared it to other player files that I've used and can't figure out the issue. The headers themselves (PLAYERID, LASTNAME, etc.) aren't actually any different - I've copied them in from previous player files, but still no luck. I have my files here (https://drive.google.com/drive/folders/1p2VTxf4n5R8NWBnO8bDqEAe1zu4N1irH?usp=drive_link) if you want to take a look. In case it makes a difference, I put the correct team numbers in Column E but all zeros in Column H.


In the meantime, I noticed that players (in modern years, at least) aren't necessarily joining the league the year they were first signed/drafted. Brandon Allen, who was drafted in 2016 but didn't play for three years, doesn't appear among active players when I generate a 2016 player file. I suspect it's because PFR doesn't mean the years before he took his first snaps - whereas, say, Sam Bradford appears in the 2014 player file even though he took no regular season snaps that year. I'm not sure what the workaround for this would be, to be honest. Nilodor's files have the right year entry information for Brandon Allen & everyone else but he pulled players differently (and included their draft information as well).

Passacaglia
12-30-2025, 05:52 PM
I'll look closer later, but just from looking at it on my phone, I'm wondering if the salary numbers you have in 2016_info match the row from your league_info file?

And I think I know what you mean about Brandon Allen. I think Carson Palmer has the same issue, where he didn't play his entire rookie year. Maybe getting better draft information will help, I'm still working on that. In the meantime, I don't mind if people just give me examples and I'll go in and fix them. You're right that it's all about PFR stats - if someone didn't play, this won't record him.

I think Sam Bradford is working as he's supposed to, though. He played 2010-2013 and 2015-2018, so in 2014, the file should include him as a free agent. That seemed right to me, but do you think it should do something different? It looks like it's another issue similar to the others, but the file is smart enough to know that he is still "in the league" and keeps him around as a player, just not on a team.

KingZal
12-30-2025, 07:24 PM
For the first few files I created, I used the default salary cap number from your file (2248) and copied one of the base info files, changing only the schedule (32_8_16) and the base year. For this one I changed it up and made a copy of nilodor's 2016_info file instead and changed your file's salary cap number to match (1000). I hope that made sense.

I looked up the usual suspects as far as late-starting quarterbacks go but a surprising number of them took snaps in their rookie year. The only ones I can think of who didn't play at all their rookie years are Jordan Love and Derek Anderson, who was drafted in 2005. Bradford's a little different - he was still a member of the Rams in 2014, but he tore his ACL in preseason and was traded to the Eagles the following offseason. So I don't mind him being a free agent too much.

KingZal
12-30-2025, 07:28 PM
Here's something interesting I noticed: everybody and their mother knows Kurt Warner's backstory, but he actually took his first NFL snaps in 1998! He played in a meaningless Week 17 game the year before his big run. Even nilodor's files had him coming into the league in 1999.

Passacaglia
12-31-2025, 06:40 AM
So I had dreams of scraping roster information from pro football reference to catch some of these. The frustrating thing is that for the two I checked, Sam Bradford and Brandon Allen, they don't show up on the PFR roster for those teams, either. Here's the 2016 Jaguars:

2016 Jacksonville Jaguars Roster & Players | Pro-Football-Reference.com (https://www.pro-football-reference.com/teams/jax/2016_roster.htm)

Bradford maybe I get if he was put on IR in the preseason, you could argue he was never "on" the roster. But Brandon Allen certainly should be.

Passacaglia
01-01-2026, 03:25 PM
KingZal -- I had a look at your files and found a couple things. One on your end, one on my end.

On your end -- the files you sent me were not the right kind of CSV. I'm not sure how you saved them, but you'll need to do it a different way.

https://i.imgur.com/e4I8CBo.png

Your files were CSV UTF-8 (Comma delimited), but they need to be the one further down, CSV (Comma delimited). That's what caused the "incorrect header" error. Once I fixed that, I had a run-time error, because of my issue.

The way I redid the distribution for OVERALLRATING had some values that came in as N/A, causing the rosters created to crash the game. Here's v3 which fixes that:

fof player generator 1920 2024 v3.xlsm - Google Drive (https://drive.google.com/file/d/1gYAzJOpSF6c0RRNWxy1i_7ak9FW7YJ5r/view?usp=drive_link)

I updated prior posts to link to v3 now, too.

I'm not sure how I feel about the distribution of OVERALLRATING in the new file. There are very few 0s, and most real players get in as 1 or above, and the fake players are all 10. In my head, I can convince myself that's correct, and that most players in this data are 1 or above, and 0s are the guys who don't really end up seeing the field and thus aren't in the data. But I don't know how weird that makes the league look.

My next step is to try to scrape the PFR roster pages like the 2016 Jags one from earlier. It may not have had Brandon Allen in it, but it does have 66 players -- so there has to be some players in it that I'm just not including.

Passacaglia
01-01-2026, 03:51 PM
Actually, looking at my file, I think I have everyone on the 2016 Jags page. I have 65 players in the 2016 Jaguars in my file. I didn't spot check everyone, but I got as far as Richard Ash, who my file puts on the Cowboys because he played one game for each team. I think what will help is getting draft information from PFR. I think that's a better year to use for determining when we want a player to come in, plus having it will fill in more info on the player's card.

KingZal
01-02-2026, 08:43 AM
Your files were CSV UTF-8 (Comma delimited), but they need to be the one further down, CSV (Comma delimited). That's what caused the "incorrect header" error. Once I fixed that, I had a run-time error, because of my issue.

That did the trick, thank you! I'm able to get into the game with these now.


As for the player ratings, I do they're inflated and they don't match the recommended FOF curve. But I'd have to see how it plays. What I can tell you anecdotally right now is that I'm seeing a lot of players whose ratings in game don't correlate to the file at all, like a 5 with a 35 overall and a 3 with a 90 overall. I know X-Factor is a thing, and it could just be a stroke of luck here, but I never saw this much variance using nilodor's files.

Passacaglia
01-02-2026, 09:59 AM
That's great! Thanks! When you say they don't match the recommended FOF curve what are you comparing it to? I'm trying to create a distribution that matches the example_playerss file, but I did that assuming I would have all the players that that game creates. I just used players, not quarterbacks, and removed FB, K, P, and LS since none of them are higher than 2. I got that the top 0.09% of players are 9s, but I took that to mean the top 0.09% of all played that would be in the game, not just the top 0.09% in my file. But I also didn't look to see how many players are in example_players - I guess it's just an example, not necessarily indicative of anything. I'm going to do more research here.

That's weird about that correlation. I wonder if it's because the distribution is different than what the game is expecting. Can you give/show examples? If they are FB, K, P, or LS, it's probably because I violated the rule that says they shouldn't be higher than 2. From testing a long time ago, I thought that was fine, but maybe at this point, it isn't. I know that nilodor's files wouldn't have that problem because he just made them all 0 - but I want to make sure we have talent at those positions. I'll do more research here too.

Meanwhile, I found some good draft data from PFR, including supplemental draft! I'm about halfway through getting the regular draft into one csv. That's going to really bump up the number of real players in the game, meaning way less fake players. Plus now it won't say everyone is undrafted when you look at your roster.

KingZal
01-03-2026, 11:02 AM
I don't remember where I got these numbers from but according to my notes, this is the player rating distribution FOF8 uses:


0 53.40% Replacement level
1 23.90% Backup
2 12.20% Starting
3 4.00% Better starter
4 2.60% All-Star
5 1.50% All-Star
6 1.10% All-Star
7 0.60% All-Star
8 0.40% Best at his position
9 0.30% Generational Talent


And this is how the FOF9 players.txt file describes the ratings, which I presume are given out similarly:


0 - The player is of replacement quality for his position. Expect low ratings across the board.
1 - The player is of backup quality. Ratings are generally low.
2 - The player is of starting quality. Ratings can vary. For lower-value positions (FB/P/K/LS), this is the top value that can be assigned.
3 - The player is usually one of the better starters in the league for his position.
4-7 - Increasingly rare - players are often All-Star level.
8 - The player is often the best in the league at his position.
9 - The player is a generational talent at his position.
10 - The player is below replacement quality for his position, and will only be placed on a team at the start of a new universe if he's needed to fill a roster.

You've probably already seen that few (if any) of the real players generated by your files are given 0s or 1s. For the test universe I created, I used player files I generated for 2019 and without any fake players, which probably skewed the distribution further.

After simming through five years I can point out a few players whose ratings stood out to me:
-Clelin Ferrell, DE. His file rating is 3 and his in-game rating is 81.
-Cortez Broughton, DT. His file rating is a 2 and his in-game rating is 82.
-Ja'Marr Chase, WR. His file rating is a 5 and his in-game rating peaked at 35.
-Cordell Volson, G. His file rating is a 3 and his in-game rating is 90.

I could just be overthinking these ratings. I've seen weird results in this game, like Drew Brees losing the starting job to Charlie Batch. But it is weird seeing real life depth pieces like Cortez Broughton and Clelin Ferell up there with all pros like Chris Jones.

As far as FB, K, P, and LS go: FB looks normal, kickers and punters are wildly talented, and long snappers are mostly dire. I don't know what nilodor did differently but I had the opposite experience with his special teams - the kickers and punters were mediocre, but every long snapper was a 90 or above.

Once I start playing a real universe with these files, I'll let you know how all this feels in game. In the meantime, I'm looking forward to seeing you get draft information working.

Passacaglia
01-03-2026, 11:50 AM
That's good info, thanks!

The one update that I have at this point is that I have all the PFR draft info assembled, and that should fix the issues with players who don't join until later years. It also looks like just over 10K players will get added to the almost 30K that are currently in the file. That should help with the distribution.

Here's the open-ended question I have that you can mull over as you play this, or any other time. Those percentages that you gave are really helpful. Do you think that's overall for the entire set of players, or that each individual position should have a distribution exactly like that?

KingZal
01-09-2026, 02:36 PM
That is a really good question. Personally, I always took that to be for each individual position. I used to dabble a lot in player creation and the way the percentages shake out, you don't see the exact same number of hall of famers at each position.

I dabbled a little in a test file starting from 1966, played with minimal supervision until ~1974 thereabouts, and found the stats are surprisingly not too far off, in spite of the inflated player ratings. According to the statistical trends page, scoring and completion percentage are a tick higher than my other universes, but nothing to the point that it kills my immersion.

Where the universe really struggles is with the salary cap. Nearly a third of the league is underwater, but I don't think it's the fault of your file's salary calculations. I've accidentally created universes with the cap too tight before and what ends up happening is that "elite" players ask for more than teams can afford, so they languish in free agency until the game assigns them to a random team in the summer for a one year vet minimum contract. I used the default salary cap numbers and the salary cap I have in the info file and macro file both match, so I'm almost certain the problem is high player ratings here.

Passacaglia
01-12-2026, 08:02 AM
I agree, that I would want each individual position to follow that exact distribution -- otherwise I would have too many good QBs.

Good to hear that the stats aren't far off! Hopefully I don't make it worse as I tinker. :P

I think you're right about the salary cap -- I didn't look at what other teams were doing when I played around with it, but I did notice that there were a lot of high quality players available. Hopefully adding that draft info will make it better.

Passacaglia
01-13-2026, 10:45 PM
I don't remember where I got these numbers from but according to my notes, this is the player rating distribution FOF8 uses:



And this is how the FOF9 players.txt file describes the ratings, which I presume are given out similarly:


You've probably already seen that few (if any) of the real players generated by your files are given 0s or 1s. For the test universe I created, I used player files I generated for 2019 and without any fake players, which probably skewed the distribution further.

After simming through five years I can point out a few players whose ratings stood out to me:
-Clelin Ferrell, DE. His file rating is 3 and his in-game rating is 81.
-Cortez Broughton, DT. His file rating is a 2 and his in-game rating is 82.
-Ja'Marr Chase, WR. His file rating is a 5 and his in-game rating peaked at 35.
-Cordell Volson, G. His file rating is a 3 and his in-game rating is 90.

I could just be overthinking these ratings. I've seen weird results in this game, like Drew Brees losing the starting job to Charlie Batch. But it is weird seeing real life depth pieces like Cortez Broughton and Clelin Ferell up there with all pros like Chris Jones.

As far as FB, K, P, and LS go: FB looks normal, kickers and punters are wildly talented, and long snappers are mostly dire. I don't know what nilodor did differently but I had the opposite experience with his special teams - the kickers and punters were mediocre, but every long snapper was a 90 or above.

Once I start playing a real universe with these files, I'll let you know how all this feels in game. In the meantime, I'm looking forward to seeing you get draft information working.

I've switched from using my percentages to what you have here. Mine was based on what was in the example_players csv that came with the game -- but that had only 12 teams, and no players who weren't on rosters. Yours are probably better. Your ratings nerf players a little compared to mine -- I had something like 40% of players as 0, and yours has 53%, so there's less of everything 1-9, pretty much across the board.

I'm also making it so that the macro calculates this based on the players it creates. So for example, if you're creating a file for 2015, only one QB is in the top 0.3% and gets a 9. If I create a file in 1966, there's more real QBs in the file, and two QBs are in the top 0.3% and get a 9. I won't name names, but the 2nd QB who got a 9 in the 1966 file was in the 2015 file and had an 8. I think this will make more recent files better, especially with QBs. Before it would have just taken the top 0.3% of all QBs from 1920, and made those a 9 no matter what. I think having it wait until it knows the exact player set will make it represent the era a little better. My hunch is when you created a 2015 file, there were way too many QBs that were way too good, and this should reduce that. I'm open to changing it back if it seems weird, though.

I'm also adding an option to make sure there's at least one player for each OVERALLRATING at every position. This is another thing that should help files from more recent years. For example, in the 2015 file, there's only 29 FBs. Even the best one isn't in the top 0.3% and won't get a 9 -- he just gets a 4. Turning this on will make the best FB a 9, the 2nd best an 8, and so on.

I still haven't added the 10K drafted players who didn't make the field, so the numbers above don't reflect that. That's next.

Passacaglia
01-14-2026, 11:37 AM
I'm seeing another issue that I'm going to fix before adding extra players, but it shouldn't take long. Some of the players available in free agency when the game starts probably shouldn't be. Right now the macro just looks at PFR data, and if it doesn't find him playing on a team that year, makes him a free agent. But I'm going to add to the logic that if he played for the same team the year before and the year after our start year, he should be on that team. For example, in 2015, both Maurkice Pouncey and Jordy Nelson were injured in preseason (in the same game, oddly enough) and missed the whole season. We don't want those guys in FA just because of that -- this change will put them on the Steelers and Packers respectively.

Passacaglia
01-16-2026, 08:15 AM
I'm seeing another issue that I'm going to fix before adding extra players, but it shouldn't take long. Some of the players available in free agency when the game starts probably shouldn't be. Right now the macro just looks at PFR data, and if it doesn't find him playing on a team that year, makes him a free agent. But I'm going to add to the logic that if he played for the same team the year before and the year after our start year, he should be on that team. For example, in 2015, both Maurkice Pouncey and Jordy Nelson were injured in preseason (in the same game, oddly enough) and missed the whole season. We don't want those guys in FA just because of that -- this change will put them on the Steelers and Packers respectively.

Okay, this fix is in, and drafted players who didn't play are in! Here's a question I have for my next step:

We'll take 2015 as an example. The file is currently creating 83 QBs that will be in the game when the league starts. However, the game needs 160 by my estimation (for a 32 team league), otherwise it will start creating its own fake players. Adding in players drafted in 2015 who didn't play accounted for one player -- Garrett Grayson. My plan is to go back to players where were drafted in earlier years and didn't play, before creating my own dummy players. The question is -- how far back should I go? It seems likely that a player drafted in 2014 is still "in" the league. Even if he's not on the team that drafted him, he's still a guy who may be hanging around as a free agent. But what about a guy drafted in 2011 who still hasn't played at all? Or even 2005?

Passacaglia
01-16-2026, 10:09 AM
Crazy that I can still find issues even this far into it, but here we are.

As I was testing 1966, I noticed that Len Dawson kept hitting FA after the first season. I was investigating whether or not that's worth preventing it (maybe by making sure good players are on a roster for multiple years, in case the AI won't renegotiate players in the first year of the game or something), when I realized he stayed on the Chiefs way longer than 1966, but PFR data switches their abbreviation from KC to KAN starting in 1967, which throws off my macro. As a result, all the Chiefs become free agents in 1967. I've made the abbreviations consistent for each team so that doesn't happen. It's required me to do things like have an abbreviation for HOUTENN to mean the Oilers/Titans, and HOUTEX to mean the Texans. Weird, but hopefully not too hard to figure out.

While I was at it, I noticed that exactly one player didn't have a team in my PFR data. It was Johnny McNally, 1925, who I'm pretty sure I already mentioned further up in this thread. He's already in the PFR data as Johnny Blood with his teams all listed (including 1925), so I just deleted Johnny McNally.

JonInMiddleGA
01-16-2026, 10:11 AM
The question is -- how far back should I go? It seems likely that a player drafted in 2014 is still "in" the league. Even if he's not on the team that drafted him, he's still a guy who may be hanging around as a free agent. But what about a guy drafted in 2011 who still hasn't played at all? Or even 2005?

I was randomly scrolling the board, happened to see this post and the question here struck my curiosity.

This is merely anecdotal of course but ... DJ Shockley was drafted in the 7th round of 2006, by the Falcons.

2006 - made roster, 3rd string, never appeared in a game
2007 - torn ACL, missed season
2008 - won 3rd string job, never appeared in a game
2009 - cut but re-signed to practice squad, later cut
2010 - signed to futures deal, eventually cut

So he was in the 2006 draft and was still rostered/under contract continuously into 2010 ... but never appeared in an actual NFL game

Seems like an extreme case BUT maybe this at least gives you more confidence in the possibility that someone could be from a draft five years prior and still be kicking around despite never actually playing.

Passacaglia
01-17-2026, 09:51 AM
Good example! DJ Shockley is in my list of what I'm calling "noplayers" -- guys who were drafted, but have no PFR data.

And that's how long he was on an actual roster -- he may have spent the next couple years calling around to see who might want him, a couple more making himself available. The question of how far to go back isn't just about rosters, it's just about being in the universe -- essentially how long until if he got a call he'd be like "The NFL? No way!" So while Shockley may be an extreme example, going back 10 years doesn't seem crazy.

Not to mention we're a) dealing with bottom of the barrel players here, and b) the alternative is a completely made up player anyway. So even if it's say present day, and DJ Shockley is hanging around the FOF universe, and potentially gets signed, even though that's weird, it still might be better than a fake player hanging around in this historical setup.

Passacaglia
01-17-2026, 10:00 AM
The way I see it, I have 6 things left to do before this is done:

1. Finish changing the abbrevations so that teams are consistent.
2. Add in supplemental draft data (I just have the regular draft).
3. Change year of entry to the year a player was drafted in, as opposed to their first year of PFR data. Two things make this hard. The first is dupes. If two players have the same name, and one guy is drafted but the other wasn't, that's going to screw things up. I use birth year and first season as my way to uniquely identify players with the same name, but I don't have either of those in this data, and first season is going to be changing as a result of this. I'll have to figure something out -- it may not be perfect, but if anyone finds errors in it, I can fix them. The other thing is the USFL draft. AFL draft was no big deal, at least with that, all the AFL teams became NFL teams, so it works out. But players that played in the USFL were also drafted by NFL teams, just didn't play. I think what makes sense is to pretend the USFL didn't exist, and just have these guys start playing when they were drafted, but I'm open.
4. Add in "noplayers" from drafts before the start year, reducing the number of fake players needed.
5. Add an end year. If someone wants to have real players start in 1990 and end in 2010 or something, maybe they should have that option? They'd be able to continue playing, but it would tart being completely fictional the next year.
6. Attribute ratings! The other steps are mostly things I just need to crank out, but there's probably some discussion that can be had here on how to use the data I have to calculate the fields. I'll create a long post (or set of posts) on it soon.

Passacaglia
01-17-2026, 10:03 AM
Well, I'll get some of this out there now. Here's what the documentation gives us on player attributes:

Player Attributes

The remaining fields offer the ability to give each player in a new universe specific ratings. Use -1 if you want a player to have his ability in that category determined by using the overall rating. The default player file in Front Office Football Nine has all -1s here. If not -1, this field should range from 0-250. Be careful, as the distribution of player ratings can change how the game plays, considerably. The highest values should be reserved only for the very best players in the league. Most players should range from 0-100 in most categories.

And here are the attributes for a QB:

TOUCH - Quarterback's ability to throw accurate screen and short passes.
QUALITY - Quarterback's ability to throw accurate mid-range passes.
ARM_STRENGTH - Quarterback's ability to throw accurate long passes.
SCRAMBLE - Quarterback's desire to run the ball when unable to find an open receiver.
DECISIONS - Quarterback's ability to make good decisions under pressure, which lowers interceptions and results in better choices on option plays and better success rates with quarterback sneaks.
ACCURACY - Quarterback's pin-point throwing accuracy, which helps with completing passes.
TIMING - Quarterback's ability to throw in front of a runner, resulting in more yards after the catch.
SENSE_RUSH - Quarterback's ability to sense the pass rush and avoid getting sacked.
READ_DEFENSE - Quarterback's ability to read the defense, resulting in better use of secondary routes and recognition of better choices on option plays.
TWO_MINUTE - Quarterback's ability to effectively run the offense during hurry-up situations, under greater time pressures.
FOOTWORK - Quarterback's natural throwing rhythm, which leads to better future development.
IMPROVISATION - Quarterback's ability to quickly deal with pressure, resulting in greater efficiency when not sacked.
CONFIDENCE - Quarterback's desire to complete longer throws, which can result in more interceptions, but also fewer missed opportunities.
SKILL_SPEED - Quarterback's raw speed in pads, resulting in more breakaway runs.
HOLE_RECOGNITION - Quarterback's (as ball carrier) ability to find the best possible path for gaining rushing yardage.
SECURE_HANDLING - Quarterback's ability to hold on to the ball after contact.

And for other players:

SKILL_SPEED - Player's raw speed in pads, resulting in more breakaway runs and receptions.
SKILL_POWER - Player's raw strength in pads, resulting in more effective blocking and dealing with block attempts.
HOLE_RECOGNITION - Ball carrier's ability to find the best possible path for gaining rushing yardage.
ELUSIVENESS - Ball carrier's ability to avoid tackles, though this might result in moving backward.
BLITZ_PICKUP - While in the backfield, a player's ability to detect and block an opposing blitzer.
CATCH_HANDS - Receiver's ability to secure a catch.
ADJUST_TO_BALL - Receiver's ability to make adjustments to his route in order to catch the ball.
ROUTE_RUNNING - Receiver's ability to effectively run his assigned route.
CATCH_IN_TRAFFIC - Receiver's ability to make a catch while navigating the middle of the field.
DEFEAT_BLOCKERS - Receiver's ability to get past a defensive player in the five-yard contact zone.
SECURE_HANDLING - Ball carrier's ability to hold on to the ball after contact.
RUN_BLOCK_TECHNIQUE - Blocker's ability to effectively maintain a block while clearing a path for a runner.
PASS_BLOCK_TECHNIQUE - Blocker's ability to effectively maintain a block while protecting the quarterback.
BLOCKING_STRENGTH - Blocker's ability to effectively counter a pass rusher's strength.
SCHEME_ACQUISITION - Offensive lineman's ability to adapt to a new team's blocking scheme.
PUNT_DISTANCE - Punter's ability to kick the ball down the field.
PUNT_HANG_TIME - Punter's ability to kick the ball higher, giving his team time to cover the punt.
PUNT_DIRECTIONAL - Punter's ability to effectively kick the ball to the sidelines.
KICKOFF_HANG_TIME - Kicker's ability to kick the ball closer to the goal line, giving his team time to cover kickoffs.
FIELD_GOAL_ACCURACY - Kicker's accuracy in attempting field goals and extra points.
FIELD_GOAL_DISTANCE - Kicker's ability to attempt and kick longer field goals.
RUN_DEFENSE - Defensive player's ability to effectively defend running plays.
PASS_RUSH_TECHNIQUE - Defensive player's ability to avoid blockers when rushing the quarterback.
PASS_RUSH_STRENGTH - Defensive player's ability to overpower blockers when rushing the quarterback.
PASS_DEFENSE_MAN - Defensive player's ability to defend passes while assigned to cover a specific receiver.
PASS_DEFENSE_PHYSICAL - Defensive player's ability to defend passes while assigned to cover a receiver and engage in the five-yard contact zone.
PASS_DEFENSE_ZONE - Defensive player's ability to identify and defend passes while assigned to a zone.
PASS_DEFENSE_HANDS - Defensive player's ability to intercept a pass when effectively defending a pass attempt.
DEFENSIVE_DIAGNOSIS - Defensive player's ability to correctly identify runs and passes, as well as his assigned role in each case.
SPECIAL_TEAMS - Player's ability to effectively participate on special teams, particularly important when in the role of gunner.
PUNT_RETURNS - Player's ability to effectively return punts.
KICK_RETURNS - Player's ability to effectively return kickoffs.
LONG_SNAPPING - Lineman's ability to accurately and quickly snap the ball to a kick holder or punter.
KICK_HOLDING - Player's ability to catch a long snap and get it into the proper spot for a kicker.
ENDURANCE - Player's ability to maintain top performance, play after play, particularly important for defensive players, receivers and running backs.

Passacaglia
01-17-2026, 10:12 AM
And here's the stats I have. I'm open to using other stats as well, but it's difficult to find places that have stats that go back historically like this. This set includes almost 59k players.

player_id
name
position
career_begin
career_end
active
height
weight
games_reg
games_started_reg
games_post
games_started_post
qb_record_reg
pass_cmp_reg
pass_att_reg
pass_cmp_pct_reg
pass_yds_reg
pass_td_reg
pass_td_pct_reg
pass_int_reg
pass_int_pct_reg
pass_first_down_reg
pass_success_reg
pass_long_reg
pass_yds_per_att_reg
pass_adj_yds_per_att_reg
pass_yds_per_cmp_reg
pass_yds_per_g_reg
pass_rating_reg
pass_sacked_reg
pass_sacked_yds_reg
pass_sacked_pct_reg
pass_net_yds_per_att_reg
pass_adj_net_yds_per_att_reg
comebacks_reg
gwd_reg
qb_record_post
pass_cmp_post
pass_att_post
pass_cmp_pct_post
pass_yds_post
pass_td_post
pass_td_pct_post
pass_int_post
pass_int_pct_post
pass_first_down_post
pass_success_post
pass_long_post
pass_yds_per_att_post
pass_adj_yds_per_att_post
pass_yds_per_cmp_post
pass_yds_per_g_post
pass_rating_post
pass_sacked_post
pass_sacked_yds_post
pass_sacked_pct_post
pass_net_yds_per_att_post
pass_adj_net_yds_per_att_post
comebacks_post
gwd_post
rush_att_reg
rush_yds_reg
rush_td_reg
rush_first_down_reg
rush_success_reg
rush_long_reg
rush_yds_per_att_reg
rush_yds_per_g_reg
rush_att_per_g_reg
targets_reg
rec_reg
rec_yds_reg
rec_yds_per_rec_reg
rec_td_reg
rec_first_down_reg
rec_success_reg
rec_long_reg
rec_per_g_reg
rec_yds_per_g_reg
catch_pct_reg
rec_yds_per_tgt_reg
touches_reg
yds_per_touch_reg
rush_receive_td_reg
rush_att_post
rush_yds_post
rush_td_post
rush_first_down_post
rush_success_post
rush_long_post
rush_yds_per_att_post
rush_yds_per_g_post
rush_att_per_g_post
targets_post
rec_post
rec_yds_post
rec_yds_per_rec_post
rec_td_post
rec_first_down_post
rec_success_post
rec_long_post
rec_per_g_post
rec_yds_per_g_post
catch_pct_post
rec_yds_per_tgt_post
touches_post
yds_per_touch_post
rush_receive_td_post
def_int_reg
def_int_yds_reg
def_int_td_reg
def_int_long_reg
pass_defended_reg
fumbles_forced_reg
fumbles_reg
fumbles_rec_reg
fumbles_rec_yds_reg
fumbles_rec_td_reg
sacks_reg
tackles_combined_reg
tackles_solo_reg
tackles_assists_reg
tackles_loss_reg
qb_hits_reg
safety_md_reg
def_int_post
def_int_yds_post
def_int_td_post
def_int_long_post
pass_defended_post
fumbles_forced_post
fumbles_post
fumbles_rec_post
fumbles_rec_yds_post
fumbles_rec_td_post
sacks_post
tackles_combined_post
tackles_solo_post
tackles_assists_post
tackles_loss_post
qb_hits_post
safety_md_post
punt_ret_reg
punt_ret_yds_reg
punt_ret_td_reg
punt_ret_long_reg
punt_ret_yds_per_ret_reg
kick_ret_reg
kick_ret_yds_reg
kick_ret_td_reg
kick_ret_long_reg
kick_ret_yds_per_ret_reg
punt_ret_post
punt_ret_yds_post
punt_ret_td_post
punt_ret_long_post
punt_ret_yds_per_ret_post
kick_ret_post
kick_ret_yds_post
kick_ret_td_post
kick_ret_long_post
kick_ret_yds_per_ret_post


I tried using AI to come up with ideas for these, and it gave me something. First thing I checked was kick returners, and its best players were LBs. I don't think LBs can even get a KR attribute in the game, so that's no good. Looking into it, the AI based it completely on average yards per return, so I think it was just taking guys who had 1 fluke return for a lot of yards, and saying they're the best. So there may be something to work with in what it was doing, but it would need tinkering (plus I need to find it).

Passacaglia
01-17-2026, 10:27 AM
Now for a little fun before I eat breakfast, I took a QBs file and added two players, both with 3 years experience:

1. Overall Rating. I gave him a 9 in OVERALLRATING but a 0 in every attribute.
2. Attributes Better. I gave him a 2 in OVERALLRATING but a 250 in every attribute.

Overall Rating guy comes in as a 0/0, with 0 across the board. Attributes Better guy is rated 95, with 100s or high 90s in everything, an 88/100 in touch, and a 77 in secure the ball. (EDIT: I tried again making his OVERALLRATING a 10 like a replacement player, and he came in as 95/98.)

So as we add in attributes, the overall rating looks like it will become meaningless. I think we may have to pick our spots putting in a real number for attributes, and use -1 when we can too.

Passacaglia
01-21-2026, 02:21 PM
The way I see it, I have 6 things left to do before this is done:

1. Finish changing the abbrevations so that teams are consistent.


This is done! There are 72 abbreviations I'm using. There have been more than 72 franchises though -- sometimes I was able to double up on an abbreviation when there was a gap in years between the franchises, for example CIN is used for the Cincinnati Celts in 1921, the Cincinnati Reds in 1933-1934, and the Cincinnati Bengals, 1968-present.

AKR
ATL
BCL
BDA
BKN
BRAVESREDSKINSCOMMANDERS
BRL
BROWNSRAVENS
BUF
CAN
CAR
CHARGERS
CHT
CIN
CLE
COL
COLTS
COWBOYSBULLDOGSPANTHERS
CRD
DALLASCOWBOYS
DAY
DEN
DET
DTX
DUL
EVN
FRN
GB
HAM
HOUTEX
HRT
INDIANSBULLDOGS
JAX
KEN
LAB
LAD
LOU
MAROONSBULLDOGS
MIA
MIL
MIN
MUN
NEWBROWNS
NO
NYG
NYY
OILERSTITANS
OOR
PATS
PHI
PIT
PRV
RAC
RAIDERS
RAMS
RCH
RII
ROCKETSHORNETS
SEA
SF
SIS
SPARTANSLIONS
STALEYSBEARS
STL
TB
TEXANSCHIEFS
TITANSJETS
TOL
TON
TORNADOESINDIANS
WAS
YANKS

Passacaglia
01-21-2026, 10:50 PM
Doing a little more research as I have been adding the supplemental draft picks, since I got curious about when was the last time a team just folded. According to PFR, it was the Dallas Texans after the 1952 season (not to be confused with the AFL Dallas Texans, who moved to KC and became the Chiefs).

https://en.wikipedia.org/wiki/Dallas_Texans_(NFL)

For all intents and purposes, the conclusion of the Texans' brief history was written before they even played their last game. Unable to find a buyer for the team, but not wanting to outright contract the franchise (which would have unbalanced the schedule), the NFL quickly began to solicit bids from other cities. The week after the Texans' Thanksgiving upset, the NFL granted a new franchise to a Baltimore-based ownership group headed by Carroll Rosenbloom, and awarded it the remaining assets (including the players) of the Texans organization.[13] Rosenbloom named his new franchise the Baltimore Colts (after the unrelated previous team from the competing All-America Football Conference, which merged with the NFL in 1950).

The Colts do not claim the history of the Texans and their predecessors as their own, despite the Colts' inaugural roster including many of the players from the 1952 Texans, plus a number of players from the 1950-1951 Yanks.

As a result, the Texans are officially recognized as the last NFL team to permanently cease operations and not be included in the lineage of any current franchise.

So it looks like the Yanks, who were around in Boston and New York from 1944-1951 (not to be confused with the New York Yanks from 1927-1928), were sold to a group moving the team to Dallas to become the Texans for the 1952 season, and after that, the team was given to the Baltimore Colts as they started the 1953 season, but it's not official. I'm thinking I should include this all as one franchise, since some players stayed with the team as it moved/changed -- in fact, the 1952 draft was done by the Yanks, and they drafted two hall of famers, Les Richter and Gino Marchetti, right before they were sold. Richter wouldn't sign with Dallas, and was traded to the Rams for 11(!) players -- although then he fought in Korea and didn't play for the Rams until 1954. Marchetti played the one year that Dallas existed, then with the Colts for the rest of his career.

Thoughts?

Passacaglia
01-25-2026, 04:28 PM
So it looks like the Yanks, who were around in Boston and New York from 1944-1951 (not to be confused with the New York Yanks from 1927-1928), were sold to a group moving the team to Dallas to become the Texans for the 1952 season, and after that, the team was given to the Baltimore Colts as they started the 1953 season

I was looking at guys who played before they were drafted, and found this guy:

https://en.wikipedia.org/wiki/Art_Donovan

Drafted by the Giants in 1947, but didn't play until 1950, and when he did, it was with the Colts (the 1950 version, not the 1953-present version). Wikipedia doesn't say why not, or how he ended up on a different team.

He plays with the Colts in 1950, and when they fold, their players are just tossed into the 1951 draft (which is why his draft year was coming in later than the first year he played).

Drafted in 1951 by the New York Yanks, and plays for them that year. They fold, and he goes to the Dallas Texans. They fold, and he goes back to Baltimore with the new Colts, and plays with them for the rest of his hall of fame career.

Passacaglia
01-26-2026, 02:21 PM
I was randomly scrolling the board, happened to see this post and the question here struck my curiosity.

This is merely anecdotal of course but ... DJ Shockley was drafted in the 7th round of 2006, by the Falcons.

2006 - made roster, 3rd string, never appeared in a game
2007 - torn ACL, missed season
2008 - won 3rd string job, never appeared in a game
2009 - cut but re-signed to practice squad, later cut
2010 - signed to futures deal, eventually cut

So he was in the 2006 draft and was still rostered/under contract continuously into 2010 ... but never appeared in an actual NFL game

Seems like an extreme case BUT maybe this at least gives you more confidence in the possibility that someone could be from a draft five years prior and still be kicking around despite never actually playing.

Here's where I'm at with this at the moment -- I'm going to let the user decide. I have an input that asks how far the file should look back for this. Using 2015 as an example, I entered 15. The file was able to generate all the QBs that it needed going back to 2009 and stopped there (it may need to go further back for other positions though).

So DJ Shockley didn't hang around until 2015, but these players that were drafted in 2009-2014 but never played did:

Keith Wenning
Nathan Enderle
Dan LeFevour
Zac Dysert
B.J. Coleman
Chandler Harnish
Aaron Murray
Ricky Stanzi
Tyler Wilson
Brad Sorensen
Jonathan Crompton
Zac Robinson
Sean Canfield
Rhett Bomar
Tajh Boyd
Mike Teel


But maybe the bigger part of this is guys that did play, but haven't played for a while. I feel like you should be able to sign these guys -- either give them another chance, or bring them out of retirement, whatever you want to call it. I'm going to take their ratings down though, to make sure they're just roster filler. If you want to sign Brett Favre in 2015 as your 3rd or 4th QB because it's fun, sure, but I don't want "real" Brett Favre hanging out in a 2015 file as if he hasn't been out of the league for 5 years.

Here's that list:

Brett Favre
Donovan McNabb
Mark Brunell
Kurt Warner
Jeff Garcia
Daunte Culpepper
Kerry Collins
Jon Kitna
David Garrard
Jake Delhomme
Chad Pennington
Marc Bulger
David Carr
Charlie Batch
Byron Leftwich
Vince Young
Sage Rosenfels
J.P. Losman
Rex Grossman
Seneca Wallace
Tim Tebow
Tyler Thigpen
Chris Redman
Matt Leinart
Kevin Kolb
Trent Edwards
Todd Collins
Chris Simms
A.J. Feeley
Kyle Boller
Charlie Frye
JaMarcus Russell
John Skelton
Brady Quinn
Billy Volek
Todd Bouman
J.T. O'Sullivan
Troy Smith
Jim Sorgi
John Beck
Thaddeus Lewis
Brodie Croyle
Dennis Dixon
Caleb Hanie
Curtis Painter
Stephen McGee
Tyler Palko
Keith Null
Max Hall
Rusty Smith
Armanti Edwards
Greg McElroy
Jeff Tuel
Brian St. Pierre
Matt Gutierrez
Brian Brohm
Levi Brown
Tony Pike
Richard Bartel
Mike Kafka
Rudy Carpenter
Tom Brandstater
Graham Harrell
Dominique Davis

KingZal
01-27-2026, 11:03 AM
I would've called that silly even two months ago but after seeing what Philip Rivers did, anything is possible.

QuikSand
01-27-2026, 11:26 AM
I haven't been engaged with this, but I'm grateful that you guys are.

I will say, overall I have not found the FOF9 single player game to be engaging enough to pull me away from FOF8 multi-player, so it's collecting dust for me as my time window for this game slowly wanes.

That said... a working set of annual roster files that would let me play out some sort of realistic historical sim year by year... that could get me to crack the game open and try it out again, I think. I'll keep an eye on this thread, and if my own user preferences seem useful, I'll drop a comment here or there.

Thanks, Passacaglia for the effort here.

Passacaglia
01-28-2026, 12:10 PM
I would've called that silly even two months ago but after seeing what Philip Rivers did, anything is possible.

Pretty much same here. I'm also just hanging my hat on the fact that really all I'm asking for these guys to do is exist, rather than do anything else. If you don't like it, file it under "weird things happen" and move on. And that I'm giving users the option here -- so if you don't want someone who's been out of the league for several years coming in, fine, it will create a fake player instead.

Passacaglia
01-28-2026, 12:36 PM
I haven't been engaged with this, but I'm grateful that you guys are.

I will say, overall I have not found the FOF9 single player game to be engaging enough to pull me away from FOF8 multi-player, so it's collecting dust for me as my time window for this game slowly wanes.

That said... a working set of annual roster files that would let me play out some sort of realistic historical sim year by year... that could get me to crack the game open and try it out again, I think. I'll keep an eye on this thread, and if my own user preferences seem useful, I'll drop a comment here or there.

Thanks, Passacaglia for the effort here.

Sure thing -- it's actually been pretty fun.

I'm opposite of you regarding multi-player -- I did enjoy it at first, but after a while, the persistence of it started to feel like a chore, and I realized I don't want to make playing games into a responsibility. Even though the idea of playing other players is way more fun than playing against "the computer", I've found that single-player fits my schedule better, since I can play when I want, and not play when I don't want.

You can probably gather from this thread that the historical features have drawn me in. I dabbled with it in FOF8, but I didn't like the need for 32 teams. I'm having a lot of fun experimenting with different league structures and different schedules.

You've got good timing -- I'm going to be releasing v4 of this pretty soon. I think that will give everyone who uses it a lot to think about regarding overall rating while I work on the attribute ratings.

Passacaglia
01-29-2026, 03:12 PM
And v4 is finally ready!

fof player generator 1920 2024 v4.xlsm - Google Drive (https://drive.google.com/file/d/1EqPV5w780ECQnQpGE2QdSlxLNKKTcRft/view?usp=sharing)

I'm not completely sold on it yet, but I think it's at a point where I'd like to hear more opinions on it. I think all the inputs are pretty self explanatory if you've kept up on this thread, but feel free to ask if anything is confusing!

KingZal
02-02-2026, 12:20 PM
Something is up with the player rating generation in v4. I'm only getting 0s all around.

Passacaglia
02-02-2026, 01:38 PM
Can you give me the inputs you used?

I'm working on 4.1 right now -- it's fixing an issue where, despite me saying that guys who are brought in from previous year would have an OVERALLRATING of 0, they were actually coming in as if they were at their peak. Not good.

It's also trying to fix players who get drafted before they actually start their careers. I'd been looking at guys like Carson Palmer -- drafted in 2003, didn't play that year, but obviously played for the team that drafted him the next year.

My rule as of v4 has been: If a player was drafted in the same year as their first season, or up to 5 years before, that draft season becomes his new first seson in the league. And if a player was drafted one year before he started playing, I assigned him to the team he played for the next year.

Then I started up a 1966 file and saw that rule isn't going to work. Roger Staubach was drafted by the Cowboys in 1964 (and the Chiefs in the AFL draft, but whatever). But he's in the Navy until he starts playing for the Cowboys in 1969. Based on the rules above, my 1966 universe includes him immediately, but doesn't assign him a team. Obviously that's not the way I want it -- it's insane to just have him sitting around as an FA in his 3rd year (FYI, he signed with the Packers, who had Bart Starr and Zeke Bratkowski), making them cray stacked at QB). But I don't know what I should do -- put him on the Cowboys as of 1964, or just wait until 1969 to have him join the league? At this point, I've changed it so that he's just on the Cowboys starting in 1964, so the rule would be:

If a player was drafted in the same year as their first season, or up to 5 years before, that draft season becomes his new first season in the league, and he gets assigned to the team he ends up first playing on.

I think that's the right thing to do, but now I wonder if the 5 should be changed to something smaller.

Passacaglia
02-03-2026, 12:13 PM
Something is up with the player rating generation in v4. I'm only getting 0s all around.

Did you click the 2nd button to assign teams? That's when the ratings get put in. You can tell because you'll have the TEAM field filled with numbers instead of names/abbreviations.

KingZal
02-07-2026, 11:03 AM
Ah, that's what it was. I didn't assign teams because I was generating players for an ongoing save file.

Passacaglia
02-07-2026, 02:43 PM
Whew! Okay, I'm just about ready to release 4.1. It fixes the Brett Favre bug (retired players coming into the league as good as they were at their peak), and the Roger Staubach bug (players who get drafted but haven't played yet being in the league as free agents). I'm going to add in the info about what round and pick players were drafted (including supplemental) first. I'd been putting it off since it's completely cosmetic and doesn't affect anything, but I'm hoping it won't take long, so I might as well get it out of the way, and it's kind of neat to have in the game.

Passacaglia
02-07-2026, 02:53 PM
Then it will be time to move on to version 5! The stats that I had don't seem as complete as I thought, which is a bummer. I have some other sources, though.

I'm not going to do these all at once, since it seems like each attribute will require different solutions. I also want to use -1 a lot, because based on what I've seen, the attributes really take over when they are put in, meaning the overall rating wouldn't matter at all if every attribute was filled in. Maybe for some stat I'll just try to focus on outliers and let everyone else roll with -1.

For v5, my plan is to hit the most important attributes, which IMO are kick returning, punt returning, and scramble frequency. I'm open to other thoughts here, too. But my thinking is kick returning and punt returning are attributes that are completely overlooked since they don't have a position. I mean, if a DE has better pass rush strength or pass rush technique, or a CB is better at man or zone, is that really going to matter? But if we've got Dante Hall and Devin Hester ranked as whatever they are overall due to their return abilities, I don't want them in the game as pretty good WRs or CBs, and I don't want KR and PR abilities to go to guys just because they are good WRs or CBs. Adding in these attributes will essentially create a new position in a way that other attributes don't. And scramble frequency is probably the biggest thing to help you know what kind of QB a player is, in a way no other attribute does for any other position, plus QB is the most important position.

Passacaglia
02-09-2026, 08:26 AM
Okay, here we go with 4.1

fof player generator 1920 2024 v4.1.xlsm - Google Sheets (https://docs.google.com/spreadsheets/d/12WWVZQF1FEimnNUkm1iJ0EN9uHMydo2G/edit?usp=sharing&ouid=112579075098969044857&rtpof=true&sd=true)

This includes the changes discussed above -- although the supplemental draft guys are weird. I assumed that if I marked them as having been drafted in the supplemental draft, the game would note somewhere that they were drafted in the supplemental draft -- instead it just adds 100 to the round they were drafted in. So Reggie While gets drafted in the 101st round, 4th overall from 1984. I tested this using the 2023 player file that comes with the game, and the one player in it who was taken in a supplemental draft, Jalen Thompson, shows up the same way (although he doesn't have an overall pick number, since he doesn't have one in real life.

A couple other changes I made:

I made the calculation that gave everyone a cap hit equal to 1/53 of the salary cap more precision. I just had a number that seemed pretty close in there before, and with rounding, can sometimes put times above the cap more than I think made sense. Really curious if people have opinions on how I'm handling salaries.

I also fixed the progress indicator -- I don't know what was up with the percentages it was spitting out, but they didn't seem to be working correctly, so I removed them. But you can at least see what it's doing, and be able to watch it change every so often, so you know it's still working.

Passacaglia
02-13-2026, 02:13 PM
Okay, time to get into some attributes! We'll start with kick returning.

I've got some pretty good stats from https://www.jt-sw.com/football/ -- I don't know who it compares to pro football reference, but the simplicity of the site makes it easier to scrape the data. It looks like it only goes to 2020, though, so I may have to supplement if I want to add 2021-2025. Kick returning stats start in 1941, which is when PFR starts them also.

I feel like I don't want to overthink this compared to using AV, but I'm open to thoughts on ways to make this process better. But this should be pretty straightforward -- we've got three stats here, number of returns, total yards, and TDs.

I think I mentioned this before, but when I tried to do this with some other data, the best guys were random players who had one return for a lot of yards. My plan to get rid of that noise is to take each player's rank in four categories:

1. Yards per return
2. Total return yards
3. TDs per return
4. Total TDs

Then multiply the ranks for all 4 of those categories to get a composite score for each player. The rank of those composites is their overall rank.

First issue, guys like Earl Thomas here:

https://i.imgur.com/9FZaKew.png

(this is from PFR because it looks nicer, but the stats I have are the same)

WTF? I rolled these up to get totals for their careers, and had multiple players with no returns but had yards. I can handle it, I deal with insurance data with plans that have no members but tons of claims all the time. I figure if a player didn't have any returns listed, I'd give him 1 and it would be fine.

So I'm adding in a threshold of 2 returns as a minimum. I've thought about raising that to numbers like 20, or even 35, which would restrict me to a number of players in my population equal to the number of QBs for some kind of symmetry, but I figured whatever, if a dude did something here, let's put him in.

Anyway, here's what we have:

https://i.imgur.com/ZHWvYiC.png

Definitely some weird guys in here, but a lot of the top looks good. Maybe raising that minimum threshold is in order though.

Passacaglia
02-13-2026, 04:04 PM
Same thing here, with punt returns. For whatever reason, data goes back all the way to 1920 here.

https://i.imgur.com/xfziI1b.png

Also looking like we need to raise the minimum threshold here too.

EDIT: That's Devin Hester who's covered up there.

Passacaglia
02-13-2026, 05:08 PM
And for scrambling. Here I'm just taking the number of career rushes divided by the number of career passes, then running up everyone I have labeled as a QB against that. This may not be a very satisfying list, but I think it's mostly correcting for some of the balancing that I needed to do earlier. In early days, QB did not necessarily mean "the guy who throws the ball all the time" which caused me to use my own methods to decide who gets to be a QB. I'm hoping scramble frequency helps me here -- and the first couple players are a FB and HB who I've made into a QB, so I feel good that it's guys like these who will end up scrambling a lot.

https://i.imgur.com/AIgNwEb.png

That said, it makes me wonder about my methodology for choosing QBs. Some of these guys have single digit pass attempts for their career, but I guess the file decided it really needed them to meet its QB quota that year.

Also note that this is just SCRAMBLE - Quarterback's desire to run the ball when unable to find an open receiver. This is something materially different from these two:

SKILL_SPEED - Quarterback's raw speed in pads, resulting in more breakaway runs.
HOLE_RECOGNITION - Quarterback's (as ball carrier) ability to find the best possible path for gaining rushing yardage.

korme
02-15-2026, 08:40 AM
I'm sorry, I have been following along, but the FOF player generator - it is read only. Is this supposed to be what I use if I want to use a league with historical players now? I feel like I've missed something along the way.

edit - nvm, I see there is a comprehensive how-to in the FOF9 subforum. Thanks.

Passacaglia
02-15-2026, 10:01 AM
I don't know why it's read-only, must be how google drive stores it. You should be able to just "save as" with a different name, though.

The v5 that I'm working on also creates the player files for you and saves them in the place they're supposed to be, so you don't have to copy them over from the tabs.

Passacaglia
02-24-2026, 10:26 AM
And v5 is ready!

Here are the changes:

1. I've increased the number of "dummy" players that the game creates, to make absolutely sure you don't get any game-generated players. This is going to be especially important once the image generator is in (that will be v6).
2. I've added an asterisk to the front of both first and last name. It looks more weird, but I'm pretty sure I've seen the game alphabetize by first and last name at different times, so I wanted to let people be able to sort these guys out in both places.
3. I've added the ability to save the files into your directory for you. It's nice to not have to take the tabs this thing generates, copy it, open the file you want, save it, for both QBs and players, so this button does it for you. Just be careful you don't overwrite anything you want to keep.
4. I tried to make it look a little more clear what the steps are. I've also added a "run all" button that does everything at once. The buttons are organized into steps because once you've generated all the players, the files pastes into Columns D and G all the teams it found that have players, and you need to tell it what ID to assign each team based on your default_teams file, in Columns E and H. But if you already know what you're going to get in D and G, and have the IDs already placed in E and H, you can just run it all. Again, be careful that you don't overwrite files you want to keep, since this will save the files, too.
5. I fixed an issue where a player who played on two teams was ending up on the team that came first alphabetically, and now he's on the team where he played more games.
6. Some attributes are in! Scramble, kick return, and punt return. As I was working on scramble, I reworked how the file decided what position everyone plays. I think it's better now.
7. I added a "salary cap suggestions" tab, that gives you a couple options for what you should set your salary to based on what year you're playing. It also generates the minimum salaries for the different experience levels, which you can paste into your league_info and xxxx_info.

There's some image stuff in the lower right, but that's not functional yet.

fof player generator 1920 2024 v5.xlsm - Google Drive (https://drive.google.com/file/d/1gI9fhUmyUvh2qXfXuCtqBKeDUC8dHNFX/view?usp=sharing)

Passacaglia
02-24-2026, 11:03 AM
This is probably a good time to hop in if you've been waiting for a more complete file before starting a universe. I probably won't do much work on it during the rest of Ramadan (I was hoping to be at this point before it started, but oh well), and the next thing I'm going to do is the image scraper, which can (and actually has to) be run after your game has started.

Passacaglia
02-25-2026, 10:07 AM
This is probably a good time to hop in if you've been waiting for a more complete file before starting a universe. I probably won't do much work on it during the rest of Ramadan (I was hoping to be at this point before it started, but oh well), and the next thing I'm going to do is the image scraper, which can (and actually has to) be run after your game has started.

Well never mind all that. A couple issues I am working on:

1. This is one that came back somehow. I'm calling it the Roger Staubach, since I'm trying to get my 1966 dynasty going, and he keeps screwing things up. I'd actually love feedback here, since I'm not sure the best way to handle him. To recap his story: He was drafted by the Cowboys in 1964, but stayed in the Navy, and didn't start playing in 1969 (there's a lot of players in the 40s like this, too). Currently, the 1966 player file this creates has him in the league (since he had been drafted), but not on a team (since he didn't join the Cowboys until 1969). This is the worst of all worlds -- I don't want him as a free agent to whoever can sign him when the game starts. The question though is -- should he be on the Cowboys in 1964 when he was drafted, or should he join the league in 1969? The flip side is Carson Palmer, who was drafted in 2003, but doesn't "play" until 2004. To me, the right answer seems like for Staubach I'd want to use the first year he played, but for Palmer, I'd want to use the year he was drafted.

2. Ratings are higher than they should be. A change I made in v5 was to add more dummy players, to make more sure that the game doesn't generate any on its own. In v4, there was a chance the game would add a few in certain positions, which usually didn't end up being a big deal, but if I want to get player images in the game, I can't have those guys throwing off each player's ID numbers. So I added a LOT more. But, that's throwing off the distribution -- if you need to be in the top 0.3% to get a 9, that's become easier now that there are more players. So I'm going to use the v5 number of players when determining how many to create, but use the old v4 number when determining ratings.

I'm still hoping to get image generation in this next version, too. I'm working on a python script that scrapes wikipedia and pro football reference to get pictures, and put them in the directory for your game. But I keep getting kicked out for violating the scraping policy! Once it lets me back in, I'll start working on making sure there's a delay between pulls to avoid that.

korme
02-26-2026, 07:55 AM
I say put the players in when they are draft eligible. In my imagination when I'm playing, I draft Staubach (or someone else does) and convince him to play immediately in 1964.

It's just the smoothest way to cover things like this. When I play 2K or basketball-gm, I want to draft David Robinson or Joel Embiid the year they entered the draft/left school and were selected, not the first time they dribbled on a pro court

Passacaglia
02-28-2026, 08:54 AM
I say put the players in when they are draft eligible. In my imagination when I'm playing, I draft Staubach (or someone else does) and convince him to play immediately in 1964.

It's just the smoothest way to cover things like this. When I play 2K or basketball-gm, I want to draft David Robinson or Joel Embiid the year they entered the draft/left school and were selected, not the first time they dribbled on a pro court

That's the way I've been leaning too. Staubach may just be a weird example, but I think of him as 70s, so seeing him start in 1964 doesn't seem right, but it's probably the best rule to deal with it.

I feel pretty good about how the image downloader is working, and I wanted to get out a version that fixed an error in v5, so here's v6 with images! I still need to test it a bit, but so far so good.

Just a heads up -- the image downloader takes a LOOONG time. There's a lot of delays built in to make sure you're not violating wikipedia's scraping policies. It took me 24 hours to do all of 1966, which had 24 teams, so I guess an hour per team for the first year of your file, but then future years should take less time since it's just the rookies coming in. It also ties up your excel -- if that's annoying, let me know, and I can give you instructions to run it from the cmd prompt -- I just had it run from excel so it's all-in-one.

https://drive.google.com/file/d/1Quow9OZzVlSwqY-6c3MPIrWAKH5bKMrG/view?usp=sharing

Passacaglia
03-04-2026, 10:18 AM
v7 is ready!

fof player generator 1920 2024 v7.xlsm - Google Drive (https://drive.google.com/file/d/16efzDGMifNE6keNTVP9B_c69fnCgcqPq/view?usp=sharing)

Fixes:

1. Improved the image downloader so that it is less likely to get the wrong person. It also takes much less time, and no longer ties up your excel while it's running.
2. Reduced salaries so that teams are less likely to cut good players immediately.
3. Improved the position assigner -- biggest impact here is that I reduced the required rank to qualify as a RB from 2.5 to 1.5 times the number of teams in the league. This prevents guys that are clearly true FBs like Kyle Juzczyk and John Kuhn from getting labeled as RBs, while still letting players listed as FB like Jim Brown, Larry Csonka, and Franco Harris end up as RB, like they would be called if they played today.
4. Adjusted quality so that it more closely matches what you would see in a typical FOF game. I also added a Quality Balance Factor that you can play around with if you feel the need to adjust things.

Passacaglia
03-25-2026, 10:10 AM
All I got is I hope you make this work because I’d love to play it.

I think we're at that point now! There's some tweaks that are mostly cosmetic, but I think this is basically good to go.

Potential improvements at this point are:
1. I have some birth city and college information from Allosaur that I still need to add in.
2. I think the function that downloads images for each player could use a little more improvement.
3. I've been told ratings are a bit higher than they should be. I personally think they are fine, and I've included a balancing factor that should make the ratings lower if you want, but I'm open to improvements here.
4. A few of the skill-specific attributes are included, but there is still opportunity to add more.

And a little plug here, I've already started a dynasty using this to create a 1966 file. FOF lets you change the name of the championship game to the Super Bowl, but doesn't let you change the numbering -- so since our first season would end in "Super Bowl I", I chose 1966 so that it would match. I'm using the real 1966 schedule, which operates as if the AFL and NFL were separate leagues, since they were at the time. It will continue that way as we go on, except for that of course there will be a common free agency and draft, so the leagues will be merged in that sense.

I'm a Lions fan, so I'm going to play as the Lions -- my goal is to win more championships in the Super Bowl era than the real Lions did. We went 1-13 in 1966, and we're in the middle of free agency for 1967. I also throw in weekly links to music popular in Detroit at the time -- we're in the height of the Motown era, but there's also a pretty strong garage rock scene in Detroit at this time, too. It's fun, check it out and post some comments!

https://forums.operationsports.com/fofc/showthread.php?t=99646

korme
04-01-2026, 11:09 AM
Curious to see how your league is progressing, Pass, and if you have seen any of the issues that I was calling to attention.