Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Add card info tooltips with keyword explanations and related cards#9806

Open
MostCromulent wants to merge 47 commits intoCard-Forge:masterfrom
MostCromulent:hoveroptions
Open

Add card info tooltips with keyword explanations and related cards#9806
MostCromulent wants to merge 47 commits intoCard-Forge:masterfrom
MostCromulent:hoveroptions

Conversation

Copy link
Contributor

MostCromulent commented Feb 19, 2026 *
edited
Loading

Summary

Adds Arena-style card info popups to desktop UI including selected card, related cards (tokens created, spellbooks etc), and keyword explanations. Includes menu options to enable/disable each section and scale card image size. Addresses #9705.

(I can imagine some people choosing to use this instead of default card view/card details panels).

Features

  • Adds a hoverable card info popup that appears when mousing over cards during a match, showing the card image, keyword ability and keyword action explanations with reminder text, and related card images (tokens, spellbook, meld pairs) grouped by category
  • Related cards supports 'creates, 'transforms into', 'other face', 'meld', 'flips into', 'specialises into', 'partner', and 'spellbook'.
  • Keyword actions are defined in a new KeywordAction enum (forge-game) covering all 67 entries from MTG comprehensive rules section 701, making them reusable across modules in future
  • Popup is constrained to the Forge window bounds, enforces single-instance display, and includes user preferences for image size and enable/disable toggle under Game menu

New files

  • forge-game/.../keyword/KeywordAction.java -- enum of all MTG keyword actions with reminder text
  • forge-gui-desktop/.../view/arcane/CardInfoPopup.java -- popup window with pill-panel styling
  • forge-gui-desktop/.../match/menus/CardInfoPopupMenu.java -- Game menu submenu for popup settings

Note

Original feature request in #9705 also wanted to include flavour text for alchemy cards. This is not currently included in Forge card data so cannot be easily extracted. I have not included in this PR as I don't think significant extra diff to achieve this is worth the benefit.


Generated with Claude Code

MostCromulent and others added 8 commits February 15, 2026 23:29
- Card image panel on left side of popup (toggle-able, Arena-style)
- Spellbook/related cards extracted from Spellbook$ ability parameters
- Image size slider (100-500px) in Game > Card Info Popup menu
- Auto-download missing card images via CachedCardImage.fetcher
- Flip card images rotated 180 degrees for correct display
- Popup hidden when Forge window loses focus or is minimized
- Large groups (>5 cards) shown at half size in wrapped grid rows

Co-Authored-By: Claude Opus 4.6
... and width constraints

Add static activePopup tracker to ensure only one popup is visible at a time.
Hide popup when owner window loses focus and skip showing when window is inactive.
Constrain related card thumbnails to fit available screen space next to hovered card.
Always show related cards including placeholder images for un-downloaded cards.

Co-Authored-By: Claude Opus 4.6
- Arrange related cards and keywords side by side (cards left, keywords right)
instead of stacking vertically
- Cap keyword text width to match the selected card image width
- Related card sizing: 1-2 cards at full size, 3+ scale to half with max 4 per row
- Add meld partner and partner-with as related card categories
- Group meld partner and meld result together in one row
- Stay-open behavior for popup menu checkboxes (menu no longer closes on toggle)

Co-Authored-By: Claude Opus 4.6
Replace FHtmlViewer-based keyword/related card rendering with custom
pill panels using dark overlay styling. Fix keyword reminder text not
appearing (double wrapping) and text clipping (use HTML View
for wrapped height calculation). Reduce card-to-popup gap.

Co-Authored-By: Claude Opus 4.6
Scan oracle text for keyword actions (goad, scry, surveil, etc.)
and display them alongside keyword abilities in the popup. Keyword
actions are defined in a new KeywordAction enum in forge-game for
reuse across modules. Also top-align keyword pills, center-justify
incomplete card rows, and increase reminder text font to 12pt.

Co-Authored-By: Claude Opus 4.6
Remove unused CMatchUI parameter from CardInfoPopupMenu constructor,
eliminate duplicate addedNames set in buildKeywords() by having the
caller pass its set directly.

Co-Authored-By: Claude Opus 4.6
Copy link
Contributor

dracontes commented Feb 19, 2026 *
edited
Loading

Some notes testing this out for a bit:

  • There's a clear overlap with being able to roll the mouse wheel up on hovering over a card to show an enlarged view of the card image. In fact these two ways to getting a detailed view of the card image do conflict a fair bit.
    I do agree the additional information in question is useful to have closer at hand.
    Though, personally, much because I think it's best if we don't hew too close to Arena, my preference would be for the additional information to be added to the wheel roll overlay instead. As it is something people should already use, it dovetails nicely.
    Or, at least, the wheel roll overlay should have this additional information as well and users should be able to choose between or against the two options.
  • In any case there's some issues with margins and not particularly informative text for some abilities, and for some reason the generated images for associated cards (namely spellbooks) are just the boilerplate blank frame one.

Copy link
Contributor Author

MostCromulent commented Feb 19, 2026 *
edited
Loading

Understand what you say about avoiding too much similarity.

I'm happy to re-work this to integrate with the scroll-up card zoom view if that's the consensus, though that perhaps makes the functionality less obvious to the kind of less experienced users who the tooltips and related cards are most useful for?

(Also personally I basically never use the scroll-up function, hence why I missed the conflict when zoomed in. I should at least be able to sort that out.)

Will look into the other issues. The image downloader for the related cards box was at least working for me earlier today.

Copy link
Contributor

dracontes commented Feb 19, 2026 *
edited
Loading

I'm happy to re-work this to integrate with the scroll-up card zoom view if that's the consensus, though that perhaps makes the functionality less obvious to the kind of less experienced users who the tooltips and related cards are most useful for?

Well, the existing functionality is similar, in broad strokes, to how things work on the Android version: there swiping tapping brings up (and dismisses) the card detail, which can then be swiped between two display formats.

Will look into the other issues. The image downloader for the related cards box was at least working for me earlier today.

Just to be clear: I don't download images for Forge. I find the built-in card renderer/image generator sufficient for my usage. The problem is that those related cards aren't rendering as expected.

A few more notes:

  • The tooltip popup flickers something fierce if you hover the cursor on the name bar of a tapped card. It happens even after moving the cursor well into the card's footprint, where you'd expect the cursor to "lock in" as it were.
  • A few more issues with displayed text:
  • Also seems like the issue with the margins of the bounding box for the text is at least intermittent. Seems like it fixed itself on my side. ETA: Or not, see below,
  • Also also, seems like the popup isn't all that consistent picking up on granted abilities: Mary Jane in the screenshot above has flying and intimidate.

Copy link
Contributor

Hanmac commented Feb 19, 2026

in theory, SpellAbilityEffect represents KeywordActions
maybe they can be used too

for KeywordInterfaces, checkout KeywordInterface#getTitle too (see TypeCycling)

Hide card info popup when zoomer is open (scroll-wheel or middle-click)
and use correct image keys so related cards (spellbook, tokens, partner,
specialize) render with Forge's card renderer instead of showing blank
when card art is not downloaded.

Co-Authored-By: Claude Opus 4.6
Hanmac added GUI labels Feb 19, 2026
MostCromulent and others added 3 commits February 19, 2026 21:34
- Parse Protection keyword details so title shows "Protection from Red"
instead of bare "Protection from " (Protection.java)
- Use CardStateView.getOracleText() instead of StaticData/CardRules lookup
- Strip card name from oracle text to avoid false positive keyword action
matches (e.g. "Boseiju, Who Endures" matching Endure)
- Sort keyword actions by oracle text position instead of enum order
- Resolve N in keyword action reminders (scry 2, mill 3) and singularize
"counters" when N=1
- Use inst.getTitle() with color-to-mana-symbol conversion for keyword names
- Filter out Enchant keyword
- Clear stale preferred size before recomputing keywords panel layout

Co-Authored-By: Claude Opus 4.6
Show keywords and related cards (spellbook, tokens, transforms) in a
side-by-side panel when zooming a card, with separate preference toggles
from the hover tooltip. Refactor CardInfoPopup building methods to
public static for reuse. Reorganize the Card Info Popups menu with
section headers for hover tooltip vs zoom view settings.

Co-Authored-By: Claude Opus 4.6
Use CardStateView boolean flags as a fallback to catch granted abilities
(e.g. Intimidate from static effects) that keywordKey parsing misses.
Unify zoom menu keyword label to "Keyword Explanations" and remove two
dead locale strings.

Co-Authored-By: Claude Opus 4.6
Copy link
Contributor Author

MostCromulent commented Feb 19, 2026

@dracontes, I'll test this more extensively tomorrow but latest commits should hopefully address many of the issues you had above including card rendering and initial implementation of seperate preference toggles to enable/disable showing related cards/keyword tips in the card zoom view.

Still working on getting it to more accurately pick up granted abilities/solve a few layout problems.

dracontes reacted with thumbs up emoji

Jetz72 added the Desktop label Feb 19, 2026
Jetz72 reviewed Feb 19, 2026
Copy link
Contributor

Jetz72 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally we could identify KeywordActions by inspecting the card's abilities and their parameters rather than the Oracle text. But I'm not sure how well that works with everything. Something like Scry might be a straightforward spot check for a ScryEffect or a ReplaceScry, but I think there are some that are implemented purely through card script.

MostCromulent and others added 4 commits February 20, 2026 08:06
- Fix related card images always showing Forge-rendered cards instead of
downloaded art by using ImageCache.getCardOriginalImageInfo placeholder
flag to trigger auto-download correctly
- Dynamically size zoom view side panel to match actual content width
instead of fixed 40% column, keeping scrollbar adjacent to content
- Use FScrollPane instead of JScrollPane for themed scrollbar styling
- Render spellbook cards 3 per row in zoom view for better readability
- Size pill to actual thumbnail width instead of full column width
- Scale thumbnails to fill available space up to user preference cap

Co-Authored-By: Claude Opus 4.6
Extract KeywordInfoUtil from CardInfoPopup (forge-gui-desktop) into
forge-gui so keyword detection is available to mobile UI. Desktop
callers now apply FSkin symbol encoding at display time instead of
during keyword building.

Co-Authored-By: Claude Opus 4.6
Copy link
Contributor Author

MostCromulent commented Feb 20, 2026

Ideally we could identify KeywordActions by inspecting the card's abilities and their parameters rather than the Oracle text. But I'm not sure how well that works with everything. Something like Scry might be a straightforward spot check for a ScryEffect or a ReplaceScry, but I think there are some that are implemented purely through card script.

@Jetz72, I've asked the AI to assess the feasability of this for each of the KeywordActions. Here's the response:

Direct ApiType match (34):
Scry, Surveil, Mill, Fight, Goad, Investigate, Explore, Connive, Discover, Cloak, Manifest Dread, Amass, Learn,
Incubate, Ring Tempts You, Venture, Vote, Clash, Detain, Regenerate, Manifest, Meld, Set In Motion, Abandon,
Proliferate, Planeswalk, Open an Attraction, Assemble, Villainous Choice, Time Travel, Endure, Airbend, Earthbend,
Blight

K: keyword definition -- no SpellAbility to inspect (3):

  • Monstrosity - K:Monstrosity:4:5 B G (keyword definition, not an effect)
  • Adapt - K:Adapt:1:2 G U (same pattern)
  • Exert - K:Exert (keyword, triggers are separate)

Ambiguous ApiType -- overloaded or flag-dependent (4):

  • Transform - SetState (also used for flip cards, MDFCs)
  • Convert - SetState (same as Transform)
  • Populate - CopyPermanent with Populate$ True flag
  • Bolster - PutCounter with Bolster$ True flag

No ApiType exists (8):
Behold, Fateseal, Roll to Visit, Collect Evidence, Suspect, Forage, Harness, Waterbend

Indistinguishable from generic effects (1):

  • Support - PutCounter with specific targeting (no flag -- identical to any "put +1/+1 counters on target creatures"
    ability)

Totals: 34 detectable via effects, 16 still need Oracle text fallback. Plus CardView doesn't expose ability data
today -- all 50 would require plumbing game-layer data into the view layer.

That means there would still need to be a hybrid approach with Oracle text fallback rather than a clean replacement. There's also an architectural question since the detection currently runs against CardStateView (which only exposes strings) rather than the game Card object -- threading ability data to the view layer would be a larger change.

Given the text approach seems to work, I'd lean toward keeping it as-is for this PR and potentially revisiting if we build richer ability metadata into CardView in the future. But happy to refactor if you feel the hybrid approach is worth it now.

Copy link
Contributor

Jetz72 commented Feb 20, 2026 *
edited
Loading

Well, 34 out of 50 (not counting the 17 trivial ones) isn't too bad of a start. Digging into it a bit more -

  • As it points out, Forge treats Monstrosity and Adapt as keyword abilities (which it probably shouldn't but not a huge issue). If we were to refactor these we'd probably just skip them in the keyword action search and let the ability keyword write the description.
  • Populate and Bolster would have to be done by inspecting parameters on their respective methods. Roll to Visit Your Attractions is done as an action via an optional parameter on RollDice.
  • Suspect and Harness would have to be detected via the Attributes$ parameter on AlterAttribute
  • Fateseal and Support seem indistinguishable. If we went this route, we'd probably resolve this by adding marker parameters to the cards that use these keyword actions. Currently a total of 21, across both keywords.
  • Transform and Convert would be indistinguishable purely from the ability scripts. We could introduce marker parameters to separate out the 15 convert cards, but I'm not sure it'd even be worth it. As far as I can tell, these actions are exactly the same thing, rules-wise. I don't think non-transforming MDFCs use SetState.
  • Feels a bit strange that Flip isn't considered a keyword action. It'd be set apart by the Mode$ parameter.
  • Exert's API is CostExert. It evidently wasn't looking at cost APIs, which is why it also missed Behold, Collect Evidence, Forage, and Waterbend. Scry and Mill can also occur as costs.
  • On a similar note, it'd also need to inspect Trigger and Replacement APIs. Plenty of these actions like Scry have effects which either trigger when you do them or modify them via REs.

I think we could get away without a hybrid approach, but it'd still be a pretty huge overhaul to what you currently have. Each keyword would need one or more cues to check against an ability, trigger, or replacement effect, for their API, parameters, sub-abilities, and any associated costs. Instead of threading ability data to the view layer we'd probably just compute the keyword action list on the game layer. Possibly within the abilities/triggers/REs themselves before compiling them in the Card[State]View class to hand off to the UI...

On second thought, if we ever wanted tooltips to work outside of a game we'd have to do it even earlier, with less tools. Possibly while as part of the CardFace/CardRules? And then we'd need to either link those keyword abilities to their ability string or generate them a second time while in-game so that we can handle cases when they're moved between cards....

...I think it's probably fine for now. I don't think the current implementation will usually be an issue as long as the card name isn't included in the text matching.

Jetz72 reviewed Feb 20, 2026
MostCromulent and others added 2 commits February 21, 2026 07:09
- Match "scries" when scanning oracle text for scry keyword action
(y - ies conjugation fallback)
- Wrap entire zoom side panel (keywords + related cards) in a single
scroll pane instead of only the related cards section
- Add spacing between keyword boxes and related cards section

Co-Authored-By: Claude Opus 4.6
Copy link
Contributor Author

MostCromulent commented Feb 25, 2026

@dracontes thanks for feedback, this is very helpful and I will investigate.

Copy link
Contributor Author

MostCromulent commented Feb 25, 2026

I appreciate that you did enough to disentangle the zoom-in and tooltip. I do think that having the zoom-in deal with the full display of large spellbooks exclusively is a smart solution. Still, I do feel the checkboxes should be available for users to disable all of it at their convenience

I think we have that here - unless there was different enable/disable functionality you wanted?

- Show The Ring emblem as related card for "the ring tempts you" cards,
with numbered levels (1-4) in oracle text and current level annotation
- Fix LTR edition collector number 13 - H13 to match Scryfall download URL
- Add ChooseFromList related card entries (e.g. Garth One-Eye)
- Include UI_DISABLE_CARD_IMAGES in tooltip cache key so toggling the
preference forces tooltip rebuild instead of showing stale images
- Improve keyword display: Craft shows just mana cost, Equip shows type
qualifiers, amass includes type word, "a"/"an" parsed as numeric 1
- Capitalize "The Ring Tempts You" keyword action display name
- Fix game log tooltip positioning to use full entry bounds

Co-Authored-By: Claude Opus 4.6
Copy link
Contributor Author

MostCromulent commented Feb 25, 2026 *
edited
Loading

@dracontes all of the issues above should now be fixed.

Game log overlap - now renders outside of the log entirely.

Garth One-Eye / Cards naming other cards

The Ring Tempts You - took some slightly ugly Ring-related hard coding within the tooltip file, but have got this working. Have also got it to track your current ring level in the header and tooltip.

Mill

Craft

Amass

Equip

dracontes reacted with thumbs up emoji

MostCromulent and others added 3 commits February 25, 2026 21:59
Detect "amass {Type}" in oracle text and look up the corresponding
Army token (Zombie, Orc, Sliver) since Amass cards don't declare
tokens via TokenScript$.

Co-Authored-By: Claude Opus 4.6
Co-Authored-By: Claude Opus 4.6
Co-Authored-By: Claude Opus 4.6
Copy link
Contributor

Hanmac commented Feb 25, 2026

Devotion is a bit tricky

because the gods have "Devotion for X and Y",
where Hybrid Mana only counts once, not twice

would be best if you check for SVar X = contains Devotion like this:

SVar:X:Count$DevotionDual.Red.White

MostCromulent reacted with thumbs up emoji

Copy link
Contributor

dracontes commented Feb 25, 2026

I think we have that here - unless there was different enable/disable functionality you wanted?

I apologize: I somehow must have convinced myself during the testing I did for my 2026-02-21 review of that version of the PR there was a checkbox implemented to disable the zoom-in view altogether, either from the Game dropdown menu or on Preferences. Just fired up that version of this PR and I can't find it.

Still, I would like that to be available for the reasons I stated. if it isn't too much trouble to implement.

Hanmac mentioned this pull request Feb 25, 2026
MostCromulent and others added 2 commits February 26, 2026 07:03
...ults

- Add master toggle prefs (UI_SHOW_HOVER_TOOLTIPS, UI_SHOW_ZOOM_TOOLTIPS)
with Ctrl+H and Ctrl+I keyboard shortcuts
- Replace individual pref checkboxes in Preferences with master toggles
that gate all tooltip display; individual options configured via in-game menu
- Rename menu from "Card Info Popups" to "Card Info Tooltips" throughout
- Merge overlay options into hover tooltip section, remove separate header
- Update defaults: all tooltip content enabled, image size 375px,
hover overlays limited to power/toughness and ability icons
- Fix NPE in KeywordInfoUtil.annotateDevotion when battlefield/graveyard null

Co-Authored-By: Claude Opus 4.6
...y refresh

- Rewrite annotateDevotion() to look up devotion colors from card SVars
(Count$Devotion / Count$DevotionDual) instead of parsing oracle text,
correctly handling dual-color devotion (e.g. Iroas, God of Victory)
- Use ManaCostShard.isColor() instead of getShardCount() so hybrid mana
symbols (e.g. {R/W}) count once toward dual devotion, not twice
- CTRL-H now immediately hides card info tooltips when toggled off
- CTRL-I now immediately refreshes the zoom view side panel when toggled

Co-Authored-By: Claude Opus 4.6
Copy link
Contributor Author

MostCromulent commented Feb 25, 2026

Devotion is a bit tricky [...] would be best if you check for SVar X = contains Devotion like this:

@Hanmac have re-worked this on latest commits, seems to be working well.

checkbox implemented to disable the zoom-in view altogether, either from the Game dropdown menu or on Preferences.

@dracontes have re-worked master enable/disable hotkeys and preferences similar to CTRL-O for overlays.

MostCromulent changed the title Add card info popup with keyword explanations and related cards Add card info tooltips with keyword explanations and related cards Feb 25, 2026
Copy link
Contributor

dracontes commented Feb 26, 2026 *
edited
Loading

have re-worked master enable/disable hotkeys and preferences similar to CTRL-O for overlays.

I'm sorry, I should have been clearer: what I am asking for is a checkbox to disable the image itself showing up when you scroll up when hovering a card. Could certainly be that checkbox you set up is what's reworked to do that.

Ran down the discussion, verifying relevant items. Here are some salient enough issues. The rest were addressed well enough.

  • Like for other, similar instances, if there's "monstrosity 5" there should be "monstrosity X".
  • Likewise for collect evidence.
  • Some confusion with trample and trample over planeswalkers
  • Seems like the layout here could be a bit more compact
  • ETA: The text for waterbend is a bit off, making it sound more like convoke than it actually is.

- Recognize "X" in keyword tooltips (Monstrosity X, Collect Evidence X)
- Fix Trample and Trample Over Planeswalkers merging into one tooltip
- Fix convert reminder text (convert and transform are interchangeable)
- Fix waterbend reminder text to match official rules (generic mana only)
- Title-case multi-word keyword action names
- Lay out single-card related groups side by side when total fits in a row

Co-Authored-By: Claude Opus 4.6
Copy link
Contributor Author

MostCromulent commented Feb 26, 2026 *
edited
Loading

what I am asking for is a checkbox to disable the image itself showing up when you scroll up when hovering a card.

I think the CTRL-I shortcut should do what you're looking for: completely disable the tooltip functionality in zoom view. Disabling the "Enable Card Information Tooltips in Zoom View" preference will do the same thing.

Here are some salient enough issues. The rest were addressed well enough.

These should now be fixed.

tool4ever requested changes Feb 28, 2026
Copy link
Contributor

tool4ever left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

huge PR, so definitely not before next release

MostCromulent reacted with thumbs up emoji
tool4ever reviewed Feb 28, 2026
MostCromulent mentioned this pull request Feb 28, 2026
Copy link
Contributor

dracontes commented Mar 1, 2026

I think the CTRL-I shortcut should do what you're looking for: completely disable the tooltip functionality in zoom view.

It doesn't disable the zoom view which is what I suspect is a good option to have. I'll note it down as a future feature request in any case.

A few more noteworthy items found while testing this version of the PR:

  • Support showing up in weird places, these two cards:
  • Another situation that could use a more compact layout,
  • Some confusion with manifest and manifest dread.
  • Escape's header needs an adjustment.
  • As well as craft. I feel the the ability should be written out in full in the header with the requited (sub)types. I do notice the explanatory text needs a touch up as well.
  • Probably something for the future, likely already planned. Certainly note it down that I'd like to see the ability explanations extended to the permanents that grant those abilities to other objects, namely Equipment and Auras.

MostCromulent and others added 4 commits March 2, 2026 07:25
Resolve ImageUtil.java conflict: prefer master's MagicColor-based
specFaceToCollectorSuffix. Adopt same pattern in our specialize
helpers (specColorToStateName, specImageKey) to eliminate per-color
switch statements.

Co-Authored-By: Claude Opus 4.6
- Allow keyword header labels to wrap to multiple lines (same
View-based height calculation as reminder text) so long headers
like Escape costs are no longer clipped
- Fix Craft title to show full "Craft with [types] {mana}" by
iterating all CostExile parts (the keywordKey comma delimiter
was splitting multi-type descriptions like Throne of the Grim
Captain)
- Fix Craft reminder text to list all exile types for multi-exile
cards instead of only the first
- Suppress redundant Transform keyword action when Craft is present
- Remove Craft title truncation from KeywordInfoUtil

Co-Authored-By: Claude Opus 4.6
...d cards

Keywords wrap at 1 thumbnail width instead of stretching to match related
card content width. Multi-group related cards (e.g. Creates + Spellbook)
show side-by-side pills with 1 card each, paired 2 per row. Fix overflow
label truncation by setting maxWidth on the JLabel.

Co-Authored-By: Claude Opus 4.6
...esent

Keyword actions with "N" in reminder text (Support, Scry, etc.) now
require a number to follow in oracle text, rejecting generic English
uses like "life-support". Hyphenated words also rejected as word
boundaries. Manifest suppressed when Manifest Dread is present, with
Manifest Dread reminder text expanded to be self-contained.

Co-Authored-By: Claude Opus 4.6
MostCromulent added a commit to MostCromulent/forge that referenced this pull request Mar 2, 2026
Clarifies the implementation details related to issue Card-Forge#9918 and its relevance to keyword tooltip display in PR Card-Forge#9806.
Detect ~20 card-type-counting cards (Tarmogoyf, Nethergoyf, Nighthawk
Scavenger) via SVar API and ~58 creature-counting cards (Lhurgoyf,
Splinterfright) via oracle text. Show dynamic Delirium-style tooltips
with current count and details on hover/zoom.

Card-type detection scans SVars/static abilities/triggers for
ValidGraveyard+CardTypes markers; scope derived from .YouOwn/.OppOwn.
Creature detection matches "number of creature cards in" oracle text.
Dedup skips card-type tooltip when Delirium keyword already present.

Also: null-guard zone accesses in existing annotations, add threshold
targets (Metalcraft /3, Threshold /7, Delirium /4), show type list in
Delirium tooltip, and add "currently" wording to annotation labels.

Co-Authored-By: Claude Opus 4.6
tool4ever added the WAIT Needs something before merging label Mar 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

tool4ever tool4ever requested changes

Jetz72 Jetz72 left review comments

Requested changes must be addressed to merge this pull request.

Assignees

No one assigned

Labels

Desktop GUI WAIT Needs something before merging

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

5 participants