FOF 2007 Utility Suite

Disclaimer: Use of this utility suite is at your own risk. I do my best to test,
but I am not responsible for any damage done to your computer or FOF game installation.

This page contains information about the utility suite I am working on for the game
Front Office Football 2007.
Currently the FOF 2007 Utility Suite consists of the following utilities:

Resource Patcher: There are a variety of pieces of the FOF UI that
people would like to change. Various artists out there have created replacement
bitmaps for some of these elements. This utility will accept "packages" of these
replacement resources and allow you to patch the FOF exe with them in a user-friendly
manner (the old method involved manual use of ResHacker). This also makes it easy
to re-patch the FOF exe whenever the game gets patched. There are two packages included
with work from Icy and Cuervo72 of Front
Office Football Central. These can be used as sample packages for those
who wish to create their own for use in this utility.

Extractor: This utility can interrogate certain windows in the
FOF UI and extract data from them that is not otherwise readily available for printing.
At the moment, this is just the Staff and Scout lists, plus some draft pool data.
More player roster data will come later. To use this utility, you need to:

Launch Extractor

Launch Front Office Football 2007 and load your game.

Open the "View Staff" window or a team roster.

Select the Scout or Staff list if doing staff.

Double-click the first entry in the list to open that Staff Member or Scout's report
window that shows all their details.

Or Open the Draft Preview and double-click the first entry in the list to open that
draftee's player report window.

Click the "Extract" button in Extractor.

When extracting multiple teams (by not opening a player report, but staying on the
team roster), you need to leave the computer alone, as it will move the mouse to
get the next team started. Otherwise it is no longer necessary to avoid covering
up the FOF window for grabbing draft classes, staff, or an individual team's roster.

Draft Analyzer: Once you have run Extractor on a draft class, this
utility is used to view and manipulate the results. At the moment it is just displaying
the draft class and adding in combine score coloring to show good or bad combine
scores. Light green means a combine score is 1.5 standard deviations above the average
for that position group or higher, dark green is 1 standard deviation better, dark
blue is 1 standard deviation lower, and light blue is 1.5 standard deviations lower.
More functionality is coming.

Interrogator: This is a utility for exploring the FOF2k7 game databases.
This is a work in progress, with more tables to be added later. So far you can view:

Base Game Data: current year, salary cap, etc

Global City Data: names, locations, etc. Game updates not available yet.

Injury Names

Teams: nicknames, city, cap loss info, etc.

Draft Order: current year draft order, plus traded picks in future years.

Transactions: raw data, still needs some interpretation based on transaction type,
and may not be grabbing all transactions available just yet.

In addition to viewing this data, you may export it all to CSV files in a location
of your choosing. Eventually I hope to directly export to an Access database as
well.

City Editor: Used to edit the list of cities used for a game. Note
that this data is global to FOF, so if you want to use different lists for different
games, you need to set up batch files to copy the customized citydata.fdt to the
game install directory and frfoot.fcy to the universe directory. Citydata.fdt is
only important when first starting a game (as it gets copied into the save file
and updated as needed), while frfoot.fcy is where the city names and abbreviations
will come from for the game.

Note that the utility includes a button that lets you make ".org" backups of these
files. This is intended to be used the first time you run the City Editor to make
clean copies of the default game files that you can restore if you mess something
up. The utility will also always back up the existing files to ".bak" extensions
whenever you save your changes, but if you've made edits before, you are backing
up the edited versions.

USE AT YOUR OWN RISK! This type of editing is not supported by Solecismic. If you
just want to change city names, use the editor built in to the game. This utility
is considered advanced usage and is primarily targeted at multiplayer league commissioners
who want a customized universe. Don't send in a support request to Solecismic if
you have crashing issues or problems with your cities after running this utility.
If you don't know what you are doing, you can hose your game and force a reinstall.

Maddenator:This will take an FOF roster exported through Extractor
and update a custom Madden Roster with players on appropriate teams. To run this:

Create the teams you are interested in in Madden. The city name from FOF must be
used for the location, and the nickname from FOF must be used for the nickname /
team name.

Save that Madden roster.

Run Extractor on your league. Open the roster window, but don't open any players,
to get Extractor to grab all teams. Make sure you do not have the "Process Free
Agents" button checked in Extractor, because you don't need them.

Run Maddenator. Tell it which Madden Roster to use, and which Extractor file to
use. It will replace players on the Madden Roster with players from Extractor for
that team. It works in descending order of overall by position, so if you have 70
guys on an FOF roster only the top 53 or 55 or whatever Madden created guys will
end up in Madden.

You may need to adjust the depth chart in Madden.

This has had limited testing so far, and only on Madden 07, so consider this beta.
I'm also not completely happy with the skill mappings, but then I probably never
will be. This is mostly for screenshots for multiplayer leagues, although the occasional
scrimmage is a lot of fun. Note that this will write a log file to (MyDocuments)\StelmackSoft\UtilitySuite,
which lists players it had trouble with. This may be useful for trouble-shooting
teams that don't have any players making the transition, as it will let you know
what the team name looked like in Extractor which may prompt edits in Madden.

Extender: This utility is essentially a GUI reporting tool for
FOF which includes reports not in the actual game. Reports will continually be added
to this utility as useful ones are discovered.

DBUpdater: This will read a league file and update a MySQL database
with the current contents of that file. It will only grab data from the current
season, so to seed your database you may need to go back to old season-end backups
the first time you run it. If you only run it once at the end of a given season,
it will still grab everything for that season, so that is the one run you MUST do.
Otherwise it will be smart about incrementally updating the database, so running
it every sim won't take very long and will keep everything up-to-date. All tables
it creates are prefixed with "fof_", and the tables will be created the first time
it is run on a given database. If you want to browse the schema, see DBCreate.sql
in the installation folder.

Draft Recorder: Takes an Analyzer Dump file from an online draft
utility and marks all the players from it drafted. Open up FOF, click "Begin Draft",
run Draft Recorder, paste the Analyzer Dump, then click the button and walk away
for a bit. Make sure you don't move the mouse until it's done.

Check Paths: Displays the 3 paths critical to the Utility Suite:
where FOF is installed, where FOF saves its games, and where the Utility Suite saves
its data. Clicking any of the 3 buttons opens an Explorer window in that directory.

Gameplan Analyzer: Reads Solevision data for games in the seasons
specified, optionally including preseason and/or postseason, and generates a ton of
gameplan statistics, including league-wide averages for runs and passes from and against
most defensive playcalls, and optionally includes offensive tendencies and success for
either a chosen team or the entire league.

Log and Play Data Manager: Takes new per-play CSV file output
from Interrogator and combines it with the HTML log files from FOF to produce CSV files
with the play text and the Solevision data fields, including the unknown ones, in an
effort to make it easier to finish cracking the Solevision files.

Version History

DraftAnalyzer now defaults to FOF weightings for bars, and defaults combines
to match those bar weights. Should be easier for new users to start with a reasonable
setup.

Fixed Interrogator OutputPath button that got messed up a couple of versions ago
without me noticing.

CheckPaths will now let you browse for the FOF install path and FOF data path,
and if these are customized will write the FOFPath.txt file for you. This should help
those with setups that don't let the UtilitySuite find these paths automatically set
them up so that the UtilitySuite will run.

Gameplan Analyzer will now read the list of cities from the league
file when picking a league to make it easier to choose which team to
run the reports on. This does add a small delay after picking the league.

Gameplan Analyzer will now display how a team's offense does in various
weather conditions under the team offense page.

Gameplan Analyzer now has a page of miscellaneous stats. Currently this
is a report of the injury likelihood overall, in normal plays, in special
teams plays, and in various weather conditions.

Extender will now output all of the recent new stats in addition to the above
in its CSV output. If you want to use these stats in your weights, add new rows
for each one, using the column name you see in the stat output CSV as the field
name at the start of the row in the weights CSV.

Extender is now better about telling you what it is doing.

Fixed issue with tackle for loss awarding in incorrect cases.

Kneeldowns no longer counted as runs for stats.

Reverses removed as possible run directions. I was wrong on how these were
reported, and since they are the primary way receivers gain rushing stats (and
I'm pretty sure that a receiver carrying the ball is how you know it's a reverse),
I've just pulled those directions from the stat outputs.

GamePlan Analyzer now has a "call percentage only" table on the Offensive Playcalling tab.

GamePlan Analyzer now shows the appropriate play percentage for individual call lines on the
Team Offense and Team Defense tables. This is usually against total plays, but is against total
run plays for run direction and total pass plays for pass distance.

GamePlan Analyzer now repeats the column headings for every major block for easier reading.

GamePlan Analyzer now has a Yards After Completion Per Completion average column in the League
Offense table.

Interrogator is now caught up with DBUpdater on what it supports: Game Drives table,
DriveResults mapping in the mappings table, all the new Player Game Stats entries,
and all the new Game Results entries.

DBUpdater now scrolls the status window automatically as progress is made.

DBUpdater now writes the following new columns to the fof_playergamestats file:

DoubleCoveragesThrownInto

DoubleCoveragesAvoided

BadPasses

RunsForLoss

RunsOf20YardsPlus

FumblesLost

HasKeyCoverage

ThrownAt

TacklesForLoss

ReceptionsOf20YardsPlusGivenUp

Kickoffs

KickoffYards

KickoffTouchbacks

AverageFieldPositionAfterKickoff

Note that if you want to backfill your current season, you will need
to delete all rows from fof_playergamestats for the current season. For speed
reasons DBUpdater does not refresh stats it has already written, but it does
query the table to see which week to start from so deleting all existing rows
for the current season will make it rewrite the current season's stats including
these new ones.

DraftAnalyzer now lets you show the individual calculated combine ratings
that are summed to generate the global combine rating in addition to the raw
scores and the standard deviations. This should help with tweaking weights,
or with filtering out guys with low combine scores that don't matter much to
you.

DraftAnalyzer now allows you to sort by any bar from the View menu.

DraftAnalyzer now connects "masked pairs" bars.

DraftAnalyzer now highlights bars that are believed to rarely be masked
with a green background.

DraftAnalyzer now has buttons to reset all position weights (how impoitant each position
is) to FOF defaults, or to all 1s.

Draft Analyzer now remembers the order players were picked in when doing "Mark
Drafted" if that info is available, and places it in the CSV if you export the data.

Draft Analyzer now lets you specify different Bars and Combines global weights
for players that did not attend the combine. For these players, only Solecismic and,
if available, Position Drill will be used to determine their combine score when
combined with this new weight. The Bars weight works normally, you can just weight it
differently for the no combine guys.

Extractor allows you to specify what file to write the data to if you don't
like the default FOFRoster.csv setting.

DBUpdater now writes a new table named "fof_futuredrafts" with the same content
as the "GameDrafts" table output by Interrogator. This tells you who owns future
picks. Note that this does not contain an actual order, but rather it's a mapping
of who owns each team's pick in the upcoming 3-4 seasons.

New utility: Check Paths. Displays the 3 paths critical to the Utility Suite: where
FOF is installed, where FOF saves its games, and where the Utility Suite saves its
data. Clicking any of the 3 buttons opens an Explorer window in that directory.

Draft Analyzer now has an Edit menu item to seed the draft order from the current
sort order. So set up your weights, sort by combine or rating or whatever, then
use this menu item to update the current draft order for the players in the list.

Draft Analyzer now has a File menu item to export the top 100 players by draft order
to a CSV for Conscriptor to import.

Fix for Draft Analyzer not showing white bars for very high or very low predicted
attributes.

Added Cyril's ResourcePatcher package to the installer.

Fixed a DBUpdater issue with transactions that have no player. Depending on database
setup, this may throw an exception trying to write -1 to an unsigned value (like
my local test server started doing for some reason...).

Fixed some fof_gameresult columns in DBUpdater to be signed instead of unsigned.

New data for DBUpdater:

DriveResult enum added to fof_mappings.

fof_gameresult has lots of new stats columns.

fof_gamedrive table added with info on each drive. The GameID column matches the
ID column from fof_gameresult to know which game the drive is for.

Draft Analyzer now draws small white bars on the attributes display to give an approximate
idea of where combines predict bars will be. These are not intended to be accurate,
but just to help give some guidance as to which attributes might be high and which
might be low based on the combine scores, rather than forcing you to remember. These
are most likely to be off when a combine affects more than one attribute, where
even a high combine might be caused by one high bar and one low bar. You have been
warned.

Draft Analyzer will also show which combines are believed to affect which bars with
extra text at the end of the attribute names as additional helper info.

Draft Analyzer now has a menu option under the "View" menu to always sort drafted
players to the bottom. This will be saved and remembered the next time you run.
This can slow down the file loading a bit, just be patient.

Draft Recorder will now attempt to verify it is on the correct line before making
the pick. If it thinks it is off it will tell you, then try one more time. If still
off, it will abort. This should help fix the occasional issues folks were having.
If this does not fix it, I can rewrite the routine completely, and perhaps add a
verification step where either it grabs the draftee list from FOF or you can copy-and-paste
it and see if it matches what it thought it tried to do. But I won't do that unless
it still has problems.

New utility: Draft Recorder. With FOF open in commissioner mode on a league and
the "Begin Draft" window open, run this utility, paste in an Analyzer Dump from
an online utility, click the button, and walk away while it runs. All your draft
picks will be made for you.

DBUpdater now encodes injury length into injury transactions. The Salary field used
to have a 1-6 number representing severity for injury transactions; that number
is still there, but the injury length in weeks is multiplied by 1000 and stuffed
in there. Your web pages now need to "mod" this field by 1000 to grab the old severity
number, and "divide" by 1000 to get full injury length.

Popularity support removed from DraftAnalyzer as obsolete. Instead the "Attributes"
score which is the weighted score of the player's bars is now displayed and sortable
in the main table as "Bars".

Extender now supports a "LeagueSiteLinks.csv" file in the My Documents \ StelmackSoft
\ UtilitySuite area. This file contains three columns: 8-letter league id, URL for
a team with {TeamID} where you expect the team id to be placed, and a URL for a
player with {PlayerID} where you expect the player id to be placed. If this is all
set up, Extender will generate links for the team images and player names in its
output.

Maddenator now writes a log of all player decisions it makes to help figure out
why players may be missing from the final roster.

Backed out earlier 64-bit attempts since they failed.

DBUpdater had its list of stage names updated to handle the inaugural season of
a league when late FA is skipped. It may not work right after the dispersal draft,
but will work once it reaches the first preseason game.

Another 64-bit support attempt: All utilities that read binary data will now look
for a file named "FOFPath.txt" in the output area (My Documents -> StelmackSoft
-> UtilitySuite). If that file exists, and if it contains a valid path to a directory
with the trailing slash included, it will use that path to the FOF installation
without trying to read the registry.

DraftAnalyzer can now import popularity data directly from a league file.

DraftAnalyzer had some small improvements to its "Mark Drafted" box to better support
some of the newer draftorder pages that leagues are using.

DraftAnalyzer now has an "Export CSV" option that will write a CSV file of most
of the analyzer data.

Extender now sorts the player arrays before running in an effort to support some
wacky league data that is out there.

Extender now has a "Best Seasons" report that lists the best seasons ever in the
league by position group.

Attempt to fix 64-bit OS issues. Retargeted some of the .NET projects to x86 instead
of AnyCPU so that they read from the 32-bit registry which should enable them to
find the FOF2k7 install key. Since I do not have a 64-bit OS, I am unable to test
this.

Extender will no longer crash when it can't find data for a player. Note that this
most commonly occurs when the game data is out of order; I am not yet handling this
case enough to get the correct data.

DBUpdater will now actually write FranchiseScore records. This is written in such
a way that it will collect any records it has missed for prior years on the first
run.

All Extender weights for scoring are now in ExtenderWeights.csv in the install directory.
If you would like to customize these weights, COPY this file to the output folder
(MyDocuments/StelmackSoft/UtilitySuite) and edit it there. It will look there first,
then grab the one in the install folder if it doesn't find a customized one, and
since each new suite release overwrites the installed one, you'd better copy it.
This file has some more tweaked weights, but I would not be surprised to see updates
to this file made available by others outside of the normal UtilitySuite chain (although
I'll update the default one if a consensus good set is made).
A word of warning about editing: the non-numeric values are case-sensitive and very
specific. Do not ever edit the stat names in the first column, and I'd recommend
copy-and-paste for the categories inside the position groups. If you edit this file
and the suite crashes, this is a very likely culprit. DO NOT re-order the position
group columns, just edit the data.

The version 2 schema now sets the player ids in the GameResult table to full 32-bit
INTs. If you ran DBUpdater after 1.8.5 but before getting this version, it will
not auto-fix these columns. See the last ALTER TABLE statement in the V2Schema.sql
file for the commands you'll need to manually run.

Extender now ignores rookies from the first year of a league for the All-Time Rookie
Team. I can't figure out how to separate these guys from all the other guys in a
dispersal draft.

Extender now has a "Run Career Reports?" checkbox on the select game dialog. If
left unchecked (the default), it will only load the current season and run season
reports. This will make weekly reports much faster for leagues with lots of history.

New utility: DBUpdater. Will create and maintain tables in a MySQL database that
contain the Interrogator data for an FOF league. See DBCreate.sql in the install
folder for details on the schema. Can load an entire season at once (which means
that for old seasons, you must go back to old season-end backups and work your way
forward one at a time to catch up), or incrementally update just changed, new, or
deleted data since the last update. Make SURE you run at least the post-Bowl state
to keep everything up-to-date.

Draft Analyzer now has a "Predict Chemistry" dialog. This allows you to enter birthdates
(month/day) for your 5 position leaders, along with a "weight" for that leader.
When you click "OK", Analyzer will attempt to generate likely conflicts / affinities
for all players in the draft pool, and will adjust the chemistry factor by the weight
for whatever leader has the conflict or affinity. DISCLAIMER: this is an attempted
prediction based on birthdates. There are other traits such as personality that
are believed to affect at least the strength of any affinity or conflict, so no
crying to me when you select or avoid a player in a draft based on the predicted
chemistry and it turns out that Analyzer was completely wrong about the player.
Use this feature at your own risk!

Extender now includes a career all-time team display, plus writes CSV files of the
career totals for further use.

Extender CSV files now prepended with the name of the league for those generating
these for multiple leagues.

Extender CSV files had the columns moved around for a more orderly ordering for
those generating custom reports so they don't have to manually fix them. For example,
rushing data now goes "attempts,yards,TDs".

Fixed Draft Analyzer to actually use the assigned position weight factor in its
overall rating calc (d'oh!).

Fixed Draft Analyzer Weights dialog to correctly handle changes to the attributes
and combine global weights when clicking "OK". These weren't being properly applied
unless you re-opened the dialog and clicked "OK" again.

Added "SaveAs" and "Load" functionality to the Draft Analyzer Weights dialog in
case you want to manage different settings. It will still use the base DraftAnalyzer.weights
file when you click "OK" and the next time you run to remember your last used settings.

DraftAnalyzer's Weight dialog has had a complete overhaul. You can now customize
weights on a per-position basis (rather than per-position group), and you can assign
weights to individual attributes to create your own scout rating for the player.
There is an option to use the min, max, or average of the scouted bars when creating
this rating. You can also assign factors for players being over/under height or
weight, having conflicts or affinities, for the scout impression, and how big an
impact the combine and attribute numbers have on the final rating. Each player will
then get these ratings applied for all positions within their group, thus helping
you find SLBs that would make better pass-rushing WLBs for example (the better-rated
position will be shown in the RPos column). Each individual factor for each position
will be displayed on the player details window, which should make it easier for
you to fine tune your weights. Note that old weights files are obsolete and will
be ignored by this version; you must redo your combine weights by position.

New Extender utility. This only has one report at the moment: a list of various
award candidates, including:

Offensive Player of the Week

Defensive Player of the Week

Offensive Rookie of the Week

Defensive Rookie of the Week

Special Teams Player of the Week

Offensive Player of the Year

Defensive Player of the Year

Offensive Rookie of the Year

Defensive Rookie of the Year

Special Teams Player of the Year

This is presented as an HTML page, so you can copy-and-paste into forums easily.
This will use the exact same TeamImageMap.csv file that Extractor is for its game
preview dump. It will also write a variety of useful data to the ( My Documents
)\StelmackSoft\UtilitySuite folder, including the displayed HTML and 3 CSV files
that list all players available for each award, their statistics, and calculated
points in a variety of areas (passing, receiving, etc). These CSV files can be used
to generate other reports.

Extractor will now generate correct color backgrounds for game previews when run
more than once without being shut down.

New Extractor engine that pulls data straight from the FOF UI. This is much faster
than before, more accurate, no longer cares about ClearType or other font issues,
and no longer requires the window stays visible EXCEPT when extracting all teams
at once (as it still has to move the mouse around to select the next team).

Interrogator will now remember your season processing preferences, and should remember
all preferences whenever a new version is installed.

Extractor has a new mode. If the Power Rating or Simulate Games windows are open,
it will grab data from both (opening the other where appropriate) and create a "WeeklyGames.html"
file (in the output area) with a list of the games sorted by marquee matchups. This
uses a weighted formula based on the win percent, power rating, and opponent win
percent for each team, combines them for each game, and then penalizes games involving
large disparities in power ratings. The table it generates is suitable for pasting
into, say, a league forum (which we are doing for WOOF). To get team graphics, you
need a "TeamImageMap.csv" file in the Utility Suite output area that contains 2
columns. First column has team city name, second has a URL to find the image for
that team. Woof's looks like:

Extractor will now pull affinities, conflicts, and red flag character issues from
the player report window if available (mostly draftees).

Draft Analyzer will display affinities, conflicts, and red flags. These will show
up in the detailed info window, and players will be colored based on them. Red text
for a player indicates conflict or red flag, green text affinities.

Draft Analyzer's Mark Drafted area can now accept pasted text from an IHOF-style
multiplayer league draft utility. Go to the "Draft Order" page, select all the picks,
copy to clipboard, paste that into the Mark Drafted area, then click "Mark Drafted".
Essentially it can now handle lines of the form " - POS FName LName", where anything
without commas can be in front of that. This has only been tested on the WOOF league
so far, and there you can actually hit CTRL-A on the page and paste all of that
and have this still work, as it can skip the headers fine. Not sure about HTML from
other leagues.

Draft Analyzer has updated combine averages / deviations based on a larger sample
size. This data has been moved to "CombineData.csv" in the install directory for
easier updating, and in case anyone would like to see the raw data for other purposes.

Draft Analyzer now has a "Show StdDevs" menu item that changes the combine display
from raw scores to standard deviation values.

Draft Analyzer now colors combine scores with a standard deviation between 0 and
-1 with a light gray background.

Draft Analyzer now has an "Edit Weights" menu item that lets you adjust the combine
weights per position used to calculate the "Comb" column. This also lets you edit
the relative position importance weights used to calculate adjusted bureau ratings,
but that won't do much until I'm importing bureau ratings from the draftpreview.html
file...

Interrogator's PlayerGameResults table now identifies the old "Unknown_1" column
as "OpposingTeamID". It is still in the same place with the same values, it's just
the heading that has been updated.

Draft Analyzer's combine data has been adjusted to match new ranges from the 6.0e
patch.

Interrogator's Team Schedule table now has a "Year" column tacked onto the end.

Interrogator now has a checkbox to control season imports. Check the box and enter
a season below it to have Interrogator only process that season and beyond in your
league file. Leave the box unchecked to grab everything.

Added "WantsTeam" to Interrogator's City Table, removed "HasTeam" (unreliable).
When a game is loaded, the City Table is reloaded with the game's data.

Added "Team Schedule" table with information on each team's schedule for the current
season.

Added "Draft Order" table with a list of which team has which pick in the current
draft. This does all the necessary translations from the "Draft" table and is set
up to work with the online drafting utilities to stop making the commish do a bunch
of hand-editing. If anyone needs customized tables like this for importing into
their league websites, let me know. I'm working on one for the draft class as well.

Interrogator should now work when there is more than one e-mail available (notably
at the start of a new season for an MP league).

Draft Analyzer now lets you set what round you think a player should be taken in.
This includes a "Don't draft" option and an "Undrafted FA" option to help you track
guys to try and get after the draft.

Added some hotkeys to Draft Analyzer:

1-7: Set draft round to 1-7

X: Don't draft this guy ever

F: Keep an eye on this guy in the FA period

+: Move the guy up within his round

-: Move the guy down within his round

M: Mark this player to keep an eye out for

D: Note that this player has been drafted

Arrow keys: Move up and down the draft list

It is hoped that with these two changes, "Marking" will be used as it is coming
up on your pick, while the rounds can be used to keep track of who is worth drafting.
Note that depending on how far up or down the draft board a guy moves, it can take
a few seconds to adjust the draft order, so be patient.

Clicking a column header in Draft Analyzer will now sort based on that column. If
you click again, it will reverse the sort.

Draft Analyzer now lets you right-click on the draft list to either "mark" players
for future reference, or to note that they have been drafted. "Marked" players will
have a yellow background, "Drafted" players will have a red background.

Draft Analyzer has a text box that lets you paste a list of draftees from the FOF
draft progress window and then mark that those players have been drafted in the
draft list.

Draft Analyzer can now export and import lists of drafted players. This is intended
for multiplayer leagues to help everyone follow along.

Draft Analyzer is back! Very basic functionality right now, just displaying the
draft class and coloring combine numbers. Essentially just enough to decide who
to interview. More functionality coming, but I'm interested in feedback on the basic
data loop of Extractor to Analyzer.

Replaced "Positions" table with "Mappings" table in Interrogator with more mappings
of integer fields to equivalent strings.

Extractor can now be run on the draft pool and will extract most draftee data. Interviewees
are not yet handled correctly (individual skills not collected, and under/overrated
not tracked), but most everything else is. Note that "0" for a combine score means
no workout was performed.

Added "Copy Economics" to City Eidtor to allow a commissioner to set up their economics
for each city however they'd like and make all cities the same.

Added a bunch more tables to Interrogator, including some global data such as hometowns
and positions, along with some saved-game data such as transactions and some team
bits. Work is ongoing in this area. A big thanks to Celeval for major assistance
in working out the binary formats.

Added Interrogator utility to view and dump some of the game data tables. Work is
under way to figure out more of this data.

Added City Editor utility to edit the frfoot.fcy and citydata.fdt data files to
allow a user to customize the list of cities used in the game. This includes everything
from the name and abbreviation (the cities.fdt / frfoot.fcy files) to the weather,
economic data, and location (the citydata.fdt). USE AT YOUR OWN RISK! And don't
bug Solecismic if you have city problems after using this.