Files
mtga-assistant/README.md
T
Aeth3randClaude Opus 5.5 5b3c8c8e63 Add match, turn and history views with a dark theme
- Top bar switching between Deck, Match, Turn and History views
- Match view: life, player counters, commanders, emblems, zone counts,
  turn timer and timeouts, land drops used/allowed, play/draw and Bo3
  draw counts, with the deck view below
- Turn view: per-player and total stats per turn with history, plus
  whole-game totals and land drops
- History: every finished game (colours, winner, who was on the play);
  click to reopen it in the other views; imports Player-prev.log
- Customize menu to show/hide items and an Arrange dialog to reorder
  deck sections and turn stats, remembered across sessions
- Static dark theme with mint accent, rounded corners, larger text
- Commanders tracked separately from emblems, with location and tax
- Quieter, non-sticky warning for cards lost to MTGA log gaps
- Correct Scryfall images for tokens

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 11:18:44 -04:00

88 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# mtga-assistant
A native Linux deck and game tracker for **Magic: The Gathering Arena** running under Steam/Proton.
It follows MTGA's `Player.log`, much like Untapped.gg and other trackers do, and shows:
Switch views with the buttons in the top bar (or Ctrl+1/2/3):
- **Deck**
- *My deck*: remaining library with draw odds, hand, battlefield, graveyard, exile, sideboard.
Between matches, it shows the last deck you submitted.
- *Opponent*: battlefield, stack, graveyard, exile, cards *known* to be in their hand or library
(cards you saw that went back into a hidden zone, or were revealed), and every card seen this match.
- *Card preview*: hover a card to see its image from [Scryfall](https://scryfall.com).
- **Match**: life totals, poison/energy and other player counters, emblems, hand/library/graveyard
counts, turn timer and timeouts used, turn/phase, Bo3 score and game time. The deck view fills
the bottom half.
- **Turn**: what happened this turn, for you, your opponent and in total: cards drawn, spells cast,
lands played, creatures died, life gained/lost, damage, discards, mills, exiles, counters and
tokens, plus land drops used/allowed. Use ◀ ▶ to browse earlier turns; the "Whole game" table
shows game totals.
- **History**: every finished game with date, event, opponent, both decks' colours, who was on
the play, the result, turns and length. Click a game to open it in the Deck/Match/Turn views
("Back to live" returns). Games from the previous MTGA session (`Player-prev.log`) are imported
on startup.
The Match view also shows who was on the play and, in best-of-three, who has been on the draw more.
*⚙ Customize* shows or hides the items in the current view. *Customize → Arrange…* lets you
reorder (drag, or ↑/↓) and show/hide the sections of the My deck and Opponent panels, or the
rows of the turn view. Your choices are remembered.
Card names, mana costs and types come from MTGA's own local card database, so they work offline.
## Requirements
- MTGA installed through Steam (Proton). The log, install and card DB are auto-detected from your
Steam library folders.
- **Detailed logs enabled** in MTGA: *Options → Account → Detailed Logs (Plugin Support)*.
- [uv](https://docs.astral.sh/uv/) (`pacman -S uv`).
## Running
```sh
uv run mtga-assistant # follow the live Player.log
uv run mtga-assistant --replay path/to/Player-prev.log --rate 40 # replay a saved log
uv run pytest # tests
```
Start it before or after MTGA: on startup it reads the existing log to catch up on a match in
progress, then follows new lines. When MTGA restarts and replaces the log, the tracker resets.
On Wayland the window's app id is `mtga-assistant`. For example, to keep it floating on another
workspace in Hyprland:
```
windowrule = float, class:^(mtga-assistant)$
windowrule = workspace 2, class:^(mtga-assistant)$
```
## Configuration
Optional: `~/.config/mtga-assistant/config.toml`
```toml
log_path = "/path/to/Player.log" # override auto-detection
mtga_dir = "/path/to/steamapps/common/MTGA"
cache_max_mb = 500 # image cache cap
history_max_mb = 300 # cap for stored game details (summaries are always kept)
```
Game history lives in `~/.local/share/mtga-assistant/history.db` (roughly 20–100 KB per game).
## Image cache
Images are downloaded only for cards that actually appear, at Scryfall's `normal` size (about
60–100 KB each), and stored in `~/.cache/mtga-assistant/images`. When the cache passes
`cache_max_mb`, the least recently viewed images are deleted. *Cache → Clear image cache* empties it.
## Known limitations
- MTGA leaves oversized game-state messages out of the log ("Message summarized because one or
more GameStateMessages exceeded the 50 GameObject or 50 Annotation limit"), typically during board
wipes. Some zones can then be stale until they next change. The app detects this and shows a
warning.
- After a library shuffle, a known card's position in the opponent's library is lost. It stays listed
under "Library … known" until it shows up again. If it is drawn without being revealed, it may
stay listed.