Game plan (.pln) editor, profile (.prf) editor, and other tools for Front Page Sports Football Pro '98 coaches and league managers.
Current state and what's next: STATUS.md · task list: TODO.md
End-user: run athc-<ver>-setup.exe. It needs no Python, uv or internet, installs per user, and puts athc on PATH.
Making a release (end users skip this): build the setup.exe with packaging/release-build.ps1 and test it in Windows Sandbox with packaging/release-test.ps1; see docs/installer.md.
athc --help lists top-level commands
athc <group> --help lists subcommands
athc <group> <subcommand> --help for flags
athc reads %LOCALAPPDATA%\athc\athc.toml for app-wide settings and leagues\<NAME>\ next to it for each league (league.toml and rule TOMLs); missing file, table or key falls back to defaults. A league's league.toml can hold a tool's table too, with only the keys that differ (convert-pdb so far). athc config set league NAME picks the league.
[toolname]
setting = "value"Third-party packages add subcommands by registering entries under the athc.commands group in their own pyproject.toml:
[project.entry-points."athc.commands"]
mytool = "mypkg.cli:mytool"The umbrella discovers them at runtime — no changes to athc needed.
See docs/design/architecture.md for the full architecture and the conventions every command follows.
Install the project and its dev tools:
uv sync
Source runs read the dev config in config/dev/ (a full athc.toml plus league folders) instead of the installed one: point ATHC_CONFIG_DIR at that folder. ATHC_LOG_DIR does the same for the run log (athc.log), so a dev run never writes the installed one; set it the same way. For the VS Code terminal, in .vscode/settings.json (in a multi-root workspace, in the .code-workspace settings with ${workspaceFolder:athc}; open a new terminal to pick it up):
"terminal.integrated.env.windows": {
"ATHC_CONFIG_DIR": "${workspaceFolder}/config/dev"
}For F5, each .vscode/launch.json entry sets it on the debug process (terminal and launch env are independent; set both if you run both ways):
{
"name": "athc profile check",
"type": "debugpy",
"request": "launch",
"module": "athc",
"args": ["profile", "check"],
"console": "integratedTerminal",
"env": { "ATHC_CONFIG_DIR": "${workspaceFolder}/config/dev" }
}For one shell session:
$env:ATHC_CONFIG_DIR = "$PWD\config\dev"uv run pytest
Coverage runs with every test run and fails below 92%.
The real-game tests are slow and skipped by default; they play the game in Windows Sandbox:
uv run pytest -m slow tests/integration/test_autocontinue_game.py --no-cov
They need:
- Windows Sandbox, with its
wsbcommand line. - The installer, built with
packaging/release-build.ps1. - Football Pro '98 installed, and
ATHC_GAME_DIRset once to the folder holdingFbPro98:setx ATHC_GAME_DIR E:\SIERRA. - The PC unlocked while they run.
Each test plays its own copy of the game, so your install, settings and leagues never change.
MIT.