pub type CardInstance = Card;Expand description
Transitional alias for downstream code still importing CardInstance.
Aliased Type§
pub struct CardInstance {Show 183 fields
pub id: CardId,
pub card_name: String,
pub full_name: String,
pub owner: PlayerId,
pub controller: PlayerId,
pub zone: ZoneType,
pub type_line: CardTypeLine,
pub mana_cost: ManaCost,
pub color: ColorSet,
pub color_identity: ColorSet,
pub base_power: Option<i32>,
pub base_toughness: Option<i32>,
pub initial_loyalty: Option<String>,
pub power_modifier: i32,
pub toughness_modifier: i32,
pub perpetual_power_modifier: i32,
pub perpetual_toughness_modifier: i32,
pub perpetual: Vec<PerpetualRecord>,
pub static_set_power: Option<i32>,
pub static_set_toughness: Option<i32>,
pub static_power_modifier: i32,
pub static_toughness_modifier: i32,
pub tapped: bool,
pub last_mana_produced: Option<Vec<u16>>,
pub flipped: bool,
pub face_down: bool,
pub has_morph: bool,
pub discarded: bool,
pub unearthed: bool,
pub class_level: i32,
pub paired_with: Option<CardId>,
pub manifested: bool,
pub cloaked: bool,
pub foretold: bool,
pub melded_with: Vec<CardId>,
pub foretold_cost_by_effect: bool,
pub is_bestowed: bool,
pub summoning_sick: bool,
pub came_under_control_since_last_upkeep: bool,
pub exerted: bool,
pub damage: i32,
pub cast_from: Option<ZoneType>,
pub counters: BTreeMap<CounterType, i32>,
pub keywords: KeywordCollection,
pub granted_keywords: KeywordCollection,
pub granted_svars: BTreeMap<String, String>,
pub static_added_subtypes: Vec<String>,
pub static_type_line_base: Option<CardTypeLine>,
pub changed_type_line_base: Option<CardTypeLine>,
pub changed_base_power: Option<Option<i32>>,
pub changed_base_toughness: Option<Option<i32>>,
pub pump_keywords: KeywordCollection,
pub pump_trigger_count: usize,
pub abilities: Vec<String>,
pub action_spell_specs: Vec<CardActionSpellSpec>,
pub action_spell_cost: Option<Cost>,
pub ai_phyrexian_payment: Option<String>,
pub spree_min_mode_cost: Option<i32>,
pub activated_abilities: Vec<ActivatedAbility>,
pub base_ability_count: usize,
pub base_trigger_count: usize,
pub changed_card_traits: BTreeMap<(i64, i64), CardTraitChanges>,
pub changed_card_traits_by_text: BTreeMap<(i64, i64), CardTraitChanges>,
pub static_abilities: Vec<StaticAbility>,
pub has_deathtouch_damage: bool,
pub cant_attack_static: bool,
pub cant_block_static: bool,
pub turn_in_zone: u32,
pub entered_battlefield_this_turn: bool,
pub attacked_this_turn: bool,
pub started_turn_tapped: bool,
pub triggers: Vec<Trigger>,
pub svars: BTreeMap<String, String>,
pub parsed_svar_cache: ParsedSVarCache,
pub is_commander: bool,
pub move_to_command_zone: bool,
pub commander_cast_count: u32,
pub is_token: bool,
pub cast_with_flashback: bool,
pub cast_with_harmonize: bool,
pub replacement_effects: Vec<ReplacementEffect>,
pub attached_to: Option<CardId>,
pub attached_to_player: Option<PlayerId>,
pub attached_this_turn: bool,
pub attachments: Vec<CardId>,
pub remembered_cards: Vec<CardId>,
pub remembered_players: Vec<PlayerId>,
pub imprinted_cards: Vec<CardId>,
pub gain_control_targets: Vec<CardId>,
pub until_leaves_battlefield: Vec<CardId>,
pub exiled_cards: Vec<CardId>,
pub paid_cost_exiled_cards: Vec<CardId>,
pub haunted_by: Vec<CardId>,
pub haunting: Option<CardId>,
pub chosen_map: HashMap<PlayerId, Vec<CardId>>,
pub remembered_cmc: Vec<i32>,
pub effect_source: Option<CardId>,
pub clone_origin: Option<CardId>,
pub copied_permanent: Option<CardId>,
pub cast_sa: Option<Box<SpellAbility>>,
pub chosen_charm_modes: HashMap<String, i32>,
pub remembered_lki_cards: Vec<Card>,
pub lose_control_condition: Option<LoseControlCondition>,
pub temp_effect_until_eot: bool,
pub temp_effect_host: Option<CardId>,
pub forget_on_moved_origin: Option<ZoneType>,
pub exile_when_no_remembered: bool,
pub exiled_by: Option<CardId>,
pub original_controller_eot: Option<PlayerId>,
pub is_transformed: bool,
pub other_part: Option<CardOtherPart>,
pub set_code: Option<String>,
pub card_number: Option<String>,
pub paper_foil: bool,
pub phased_out: bool,
pub regeneration_shields: i32,
pub kicked: bool,
pub monstrous: bool,
pub chosen_colors: Vec<String>,
pub chosen_cards: Vec<CardId>,
pub animate_state: Option<AnimateState>,
pub clone_state: Option<CloneState>,
pub chosen_type: Option<String>,
pub chosen_type2: Option<String>,
pub noted_types: Vec<String>,
pub named_cards: Vec<String>,
pub chosen_number: Option<i32>,
pub chosen_player: Option<PlayerId>,
pub chosen_player_controller: Option<PlayerId>,
pub chosen_type_controller: Option<PlayerId>,
pub chosen_player_revealed: bool,
pub chosen_type_revealed: bool,
pub promised_gift: Option<PlayerId>,
pub attraction_lights: Vec<u32>,
pub sector: Option<String>,
pub chosen_sector: Option<String>,
pub sprocket: i32,
pub chosen_even_odd: Option<String>,
pub detained: bool,
pub attacking_player: Option<PlayerId>,
pub goaded_by: Option<PlayerId>,
pub damage_prevention: i32,
pub assigned_damage: i32,
pub must_block: bool,
pub encoded_cards: Vec<CardId>,
pub damage_sources_this_turn: Vec<CardId>,
pub total_damage_done_this_turn: i32,
pub lki_power: Option<i32>,
pub lki_toughness: Option<i32>,
pub lki_counters: Option<BTreeMap<CounterType, i32>>,
pub damage_history: CardDamageHistory,
pub must_block_cards: Vec<CardId>,
pub etb_counters_p1p1: i32,
pub colors_spent_to_cast: u16,
pub paying_mana_to_cast: Vec<u16>,
pub chosen_modes: Option<Vec<usize>>,
pub strive_extra_targets: u32,
pub became_target_this_turn: bool,
pub temp_controllers: Vec<PlayerId>,
pub may_look_at: Vec<PlayerId>,
pub may_play: Vec<PlayerId>,
pub can_block_additional: i32,
pub can_block_any: bool,
pub cant_have_keywords: HashSet<String>,
pub intensity: i32,
pub surveilled: bool,
pub milled: bool,
pub visited_this_turn: bool,
pub times_crewed_this_turn: u32,
pub is_crewed: bool,
pub ignore_legend_rule_flag: bool,
pub ability_activated_this_turn: u32,
pub ability_resolved_this_turn: u32,
pub number_turn_activations: ActivationTable,
pub number_game_activations: ActivationTable,
pub number_ability_resolved: ActivationTable,
pub planeswalker_abilities_activated: u32,
pub planeswalker_activation_limit_used: bool,
pub chosen_modes_turn: Option<u32>,
pub enlisted_this_combat: bool,
pub activations_this_game: BTreeMap<usize, u32>,
pub is_renowned: bool,
pub zone_timestamp: u64,
/* private fields */
}Fields§
§id: CardId§card_name: StringThe card’s active face name (front face for single/split cards, active face for DFC). On the battlefield, this is the name that’s displayed.
full_name: StringThe full combined name for split/room cards (e.g. “Walk-In Closet // Forgotten Cellar”).
For non-split cards, this equals card_name. Used for hand/graveyard display and
database lookups.
owner: PlayerId§controller: PlayerId§zone: ZoneType§type_line: CardTypeLine§mana_cost: ManaCost§color: ColorSet§color_identity: ColorSetImmutable color identity from the card’s rules (CR 903.4): mana cost
colors plus any mana symbols found in the oracle text (outside reminder
text). Used for commander color-identity checks and Combo ColorIdentity
mana productions. Mirrors Java CardRules.getColorIdentity().
base_power: Option<i32>§base_toughness: Option<i32>§initial_loyalty: Option<String>Printed starting loyalty for planeswalkers.
power_modifier: i32Temporary P/T modifications from spells/abilities resolving this turn (e.g. Giant Growth). Reset when leaving the battlefield.
toughness_modifier: i32§perpetual_power_modifier: i32Perpetual P/T modifications — persist across zone changes (never reset).
Applied by PumpAll / Pump effects with Duration$ Perpetual.
perpetual_toughness_modifier: i32§perpetual: Vec<PerpetualRecord>Java-parity storage of all perpetual effect records applied to this card.
static_set_power: Option<i32>Layer 7b override: set by SetPower$ / SetToughness$ continuous effects.
None means use base_power / base_toughness as normal.
Reset to None each time [layer::apply_continuous_effects] runs.
static_set_toughness: Option<i32>§static_power_modifier: i32Layer 7c bonus: accumulated from AddPower$ / AddToughness$ anthems.
Reset to 0 each time [layer::apply_continuous_effects] runs.
static_toughness_modifier: i32§tapped: bool§last_mana_produced: Option<Vec<u16>>Mana atoms produced the last time this land was tapped for mana. Used for mana rollback — when untapping, remove exactly this mana from pool. Covers base production + aura triggers + static doublers + any other source.
flipped: bool§face_down: bool§has_morph: boolTrue if this card has Morph or Megamorph and can be cast face-down for {3}.
discarded: boolTrue if this card was discarded (CR 400.7k, for TrackDiscarded$ effects).
unearthed: boolTrue if this card was unearthed (should be exiled at EOT or if leaving battlefield).
class_level: i32Class enchantment level (1 = base, 2+ = leveled up).
paired_with: Option<CardId>Soulbond: paired creature (if any).
manifested: boolTrue if this card was manifested (face-down as 2/2 creature).
cloaked: boolTrue if this card was cloaked (face-down with ward {2}).
foretold: boolTrue if this card was foretold (exiled face-down via Foretell).
melded_with: Vec<CardId>Other card(s) melded/merged with this one. When this card changes zones, all melded parts move together (CR 712.4).
foretold_cost_by_effect: boolTrue if foretold cost was set by an effect (not the card’s own Foretell ability).
is_bestowed: boolTrue if this card is currently bestowed (attached as an Aura via Bestow).
summoning_sick: bool§came_under_control_since_last_upkeep: bool§exerted: bool§damage: i32§cast_from: Option<ZoneType>Zone the card was cast from (mirrors Java Card.castFrom). Some only
while the card represents a spell that was actually cast — set during
cast resolution, cleared on every zone change so the next “object” the
card becomes (CR 400.7) starts with no cast history. Used by
wasCast/wasCastByYou valid filters (e.g. Sunderflock’s ETB).
counters: BTreeMap<CounterType, i32>§keywords: KeywordCollection§granted_keywords: KeywordCollectionKeywords granted by continuous static effects (Layer 6).
Reset and recomputed each time [layer::apply_continuous_effects] runs.
granted_svars: BTreeMap<String, String>SVars supplied by granted text (e.g. AddTrigger$/AddAbility$).
Reset and recomputed each time [layer::apply_continuous_effects] runs.
static_added_subtypes: Vec<String>Type tokens added by continuous static effects (Layer 4, AddType$).
Reset and recomputed each time [layer::apply_continuous_effects] runs.
The listed strings may be supertypes, core card types, or subtypes;
keeping a separate list lets us revert on reset without losing the
card’s intrinsic type line.
static_type_line_base: Option<CardTypeLine>§changed_type_line_base: Option<CardTypeLine>§changed_base_power: Option<Option<i32>>§changed_base_toughness: Option<Option<i32>>§pump_keywords: KeywordCollectionKeywords granted temporarily by pump effects (KW$ parameter) until end of turn.
Cleared during step_cleanup alongside power_modifier / toughness_modifier.
pump_trigger_count: usizeNumber of triggers added temporarily by DB$ Animate | Triggers$ effects.
At cleanup, this many triggers are popped from the end of the triggers vec.
abilities: Vec<String>§action_spell_specs: Vec<CardActionSpellSpec>Prebound SP$ ability metadata used by action-space filters.
action_spell_cost: Option<Cost>Prebound first SP$ Cost used by action-space non-mana cost checks.
ai_phyrexian_payment: Option<String>Prebound AIPhyrexianPayment$ policy from printed ability text.
spree_min_mode_cost: Option<i32>Prebound minimum Spree mode cost from Choices$ -> SVar ModeCost$.
activated_abilities: Vec<ActivatedAbility>§base_ability_count: usizeNumber of base activated abilities (before continuous effects add more via AddAbility$).
Used by apply_continuous_effects to truncate granted abilities on reset.
base_trigger_count: usizeNumber of base triggers (before continuous effects add more via AddTrigger$).
Used by apply_continuous_effects to truncate granted triggers on reset.
changed_card_traits: BTreeMap<(i64, i64), CardTraitChanges>Applied card-trait mutation layers keyed by (timestamp, static_id).
Mirrors Java changedCardTraits table.
changed_card_traits_by_text: BTreeMap<(i64, i64), CardTraitChanges>Text-layer trait changes keyed by (timestamp, static_id).
Mirrors Java changedCardTraitsByText table.
static_abilities: Vec<StaticAbility>Parsed static abilities (from S$ lines in abilities).
Mirrors Java Forge Card.getStaticAbilities().
has_deathtouch_damage: bool§cant_attack_static: boolSet by Mode$ CantAttack static effects. Reset each time
[layer::apply_continuous_effects] runs.
cant_block_static: boolSet by Mode$ CantBlock static effects. Reset each time
[layer::apply_continuous_effects] runs.
turn_in_zone: u32§entered_battlefield_this_turn: bool§attacked_this_turn: bool§started_turn_tapped: boolSnapshot of whether this permanent was tapped at the start of its controller’s current turn (before untap step).
triggers: Vec<Trigger>§svars: BTreeMap<String, String>§parsed_svar_cache: ParsedSVarCache§is_commander: boolTrue if this card is designated as a commander.
move_to_command_zone: boolTrue if this commander entered graveyard or exile since the last SBA check and may still be moved to the command zone.
commander_cast_count: u32How many times this commander has been cast from the command zone (for tax).
is_token: boolTrue if this permanent is a token or a copy-token (ceases to exist on zone change).
cast_with_flashback: boolSet when the card is cast from graveyard via Flashback. Used by the flashback replacement effect to exile the card when it leaves the stack.
cast_with_harmonize: boolSet when the card is cast from graveyard via Harmonize. Used by the Harmonize replacement effect to exile the card when it leaves the stack.
replacement_effects: Vec<ReplacementEffect>§attached_to: Option<CardId>The permanent this card is currently attached to (for Auras/Equipment).
attached_to_player: Option<PlayerId>§attached_this_turn: boolWhether this equipment was attached/moved this turn (AI memory to prevent ping-ponging).
Cleared at start of each turn. Mirrors Java AiCardMemory.MemorySet.ATTACHED_THIS_TURN.
attachments: Vec<CardId>Cards currently attached to this permanent (inverse of attached_to).
remembered_cards: Vec<CardId>Cards remembered by this card (for RememberCountered, etc.)
remembered_players: Vec<PlayerId>Players remembered by this card (for Player.IsRemembered checks).
imprinted_cards: Vec<CardId>Cards imprinted on this card (for Imprint mechanic, e.g. Chrome Mox).
gain_control_targets: Vec<CardId>Cards associated via gain-control effects.
until_leaves_battlefield: Vec<CardId>Cards linked by “until leaves battlefield” tracking.
exiled_cards: Vec<CardId>Cards exiled by this card/effect.
paid_cost_exiled_cards: Vec<CardId>Cards exiled specifically to pay this card’s current activation/cast cost. This is reset at the start of each cost payment attempt.
haunted_by: Vec<CardId>Cards haunting this card.
haunting: Option<CardId>Card currently haunted by this card.
chosen_map: HashMap<PlayerId, Vec<CardId>>Per-player chosen card map.
remembered_cmc: Vec<i32>CMC values remembered by this card
effect_source: Option<CardId>Source card that created this effect card (for Card.EffectSource checks).
clone_origin: Option<CardId>§copied_permanent: Option<CardId>§cast_sa: Option<Box<SpellAbility>>The spell ability used to cast this card instance onto the stack.
Mirrors Java Card.getCastSA(). Populated when the card hits the stack,
cleared when it leaves the battlefield.
chosen_charm_modes: HashMap<String, i32>For SP$ Charm: last turn each mode (keyed by its SVar name) was chosen
on this card instance. Feeds ChoiceRestriction$ filtering.
Mirrors the per-card mode history Java keeps on Card.
remembered_lki_cards: Vec<Card>LKI (last-known-information) snapshots of cards remembered by this
card via RememberLKI$. Each entry is a frozen copy taken at remember
time via CardCopyService::get_lki_copy. Callers that care about
“what was this creature when it died” query this list instead of
remembered_cards (which stores live IDs and drifts).
lose_control_condition: Option<LoseControlCondition>When set, the card’s original_controller_eot must be restored on the
trigger described here. Mirrors the Java ControlGainEffect set of
LoseControl$ variants that register distinct GameCommands.
temp_effect_until_eot: boolTrue if this temporary effect expires at end of turn cleanup.
temp_effect_host: Option<CardId>Host card this temporary effect is linked to; when host leaves the battlefield, this effect expires.
forget_on_moved_origin: Option<ZoneType>Forget remembered cards when they move from this origin zone.
exile_when_no_remembered: boolExile this effect when remembered cards become empty after forget logic.
exiled_by: Option<CardId>When this card is in exile, the card that caused it to be exiled here.
Used for Duration$ UntilHostLeavesPlay effects (e.g. Deputy of Detention):
when exiled_by leaves the battlefield, this card returns to its owner’s battlefield.
original_controller_eot: Option<PlayerId>Original controller to restore at end of turn (for LoseControl$ EOT).
is_transformed: boolTrue if this card is currently showing its back face.
other_part: Option<CardOtherPart>Back-face characteristics for DFC cards. None for single-faced cards.
set_code: Option<String>Optional set code (e.g., “M21”) for specific printings.
card_number: Option<String>Optional collector number within a set (e.g., “1”, “42”). For tokens, this is the token’s collector number in the token set (e.g., collector “1” in set “THOU” for Adorned Pouncer token).
paper_foil: bool§phased_out: bool§regeneration_shields: i32§kicked: boolWhether this permanent was kicked when cast.
Mirrors Java Card.isKicked(). Stored on the card so triggers
with ValidCard$ Card.Self+kicked can check it after resolution.
monstrous: boolWhether this permanent has become monstrous.
Mirrors Java Card.isMonstrous(). Resets when the permanent changes zones.
chosen_colors: Vec<String>Colors chosen by ChooseColorEffect (stored for later reference by other effects).
chosen_cards: Vec<CardId>Cards chosen by ChooseCardEffect (stored for later reference by other effects).
animate_state: Option<AnimateState>Saved state for AnimateEffect — restored during step_cleanup.
clone_state: Option<CloneState>Saved state for temporary Clone effects — restored during step_cleanup.
chosen_type: Option<String>Type chosen by ChooseType effect (e.g. “Goblin”, “Artifact”).
chosen_type2: Option<String>Secondary chosen type used by a subset of cards (e.g. Illusionary Terrain).
noted_types: Vec<String>Noted types tracked by effects that accumulate type names.
named_cards: Vec<String>Card names chosen by NameCard effect.
chosen_number: Option<i32>Number chosen by ChooseNumber effect.
chosen_player: Option<PlayerId>Player chosen by ChoosePlayer effect.
chosen_player_controller: Option<PlayerId>Controller who made the chosen-player choice.
chosen_type_controller: Option<PlayerId>Controller who made the chosen-type choice.
chosen_player_revealed: boolWhether the chosen player has been revealed.
chosen_type_revealed: boolWhether the chosen type has been revealed.
promised_gift: Option<PlayerId>Opponent chosen for PromiseGift cost.
attraction_lights: Vec<u32>Attraction lights printed on the card face.
sector: Option<String>Attraction sector assignment.
chosen_sector: Option<String>Chosen sector before assignment effects resolve.
sprocket: i32Contraption sprocket assignment.
chosen_even_odd: Option<String>Chosen even/odd marker.
detained: boolTrue if detained — can’t attack, block, or activate abilities. Clears at controller’s next turn.
attacking_player: Option<PlayerId>Set during combat to the player this creature is attacking; None if not attacking.
goaded_by: Option<PlayerId>Player who goaded this creature. Goaded creature must attack but can’t attack goader.
damage_prevention: i32Damage prevention shields (decremented when damage would be dealt). Resets at EOT.
assigned_damage: i32Damage assigned in current combat assignment step.
must_block: boolTrue if this creature must block if able.
encoded_cards: Vec<CardId>Spell cards encoded/ciphered onto this creature.
damage_sources_this_turn: Vec<CardId>Cards that dealt damage to this creature this turn (for DamagedBy trigger filters).
Mirrors Java CardDamageHistory.getDamageReceivedThisTurn().
total_damage_done_this_turn: i32Total damage dealt by this card this turn (for Count$TotalDamageDoneByThisTurn).
Mirrors Java Card.getTotalDamageDoneBy() via DamageHistory.getDamageDoneThisTurn().
Reset each turn in new_turn().
lki_power: Option<i32>Last-known information: power when this card last left the battlefield.
Mirrors Java’s LKI system for TriggeredCard$CardPower.
None means LKI was never captured; Some(0) means power was 0.
lki_toughness: Option<i32>Last-known information: toughness when this card last left the battlefield.
None means LKI was never captured; Some(0) means toughness was 0.
lki_counters: Option<BTreeMap<CounterType, i32>>Last-known information: counters when this card last left the battlefield.
Used by TriggeredCard$CardCounters.TYPE (e.g. Servant of the Scale death trigger).
damage_history: CardDamageHistoryDamage history tracking (attacks, blocks, damage dealt).
Mirrors Java CardDamageHistory.
must_block_cards: Vec<CardId>Specific cards this creature must block (set by effects like Lure variants).
etb_counters_p1p1: i32+1/+1 counters to add on ETB (from mana that adds counters, e.g. Guildmages’ Forum).
colors_spent_to_cast: u16Bitmask of colors of mana spent to cast this spell (for Sunburst/Converge). Uses ManaAtom bit flags (W=1, U=2, B=4, R=8, G=16).
paying_mana_to_cast: Vec<u16>Exact mana atoms spent to cast this spell, in payment order. Mirrors Java’s castSA.getPayingMana() use sites such as Adamant.
chosen_modes: Option<Vec<usize>>Pre-selected charm/mode indices (for Spree — modes chosen before payment).
If Some, charm_effect should use these instead of asking the player again.
strive_extra_targets: u32Number of extra targets paid for via Strive (0 = no extra targets).
became_target_this_turn: boolTracks if this card became a target this turn.
temp_controllers: Vec<PlayerId>Temporary controllers layered on this card.
may_look_at: Vec<PlayerId>Players that may look at this card.
may_play: Vec<PlayerId>Players that may play this card.
can_block_additional: i32Additional blockers this creature can declare.
can_block_any: boolWhether this creature can block any number of creatures.
cant_have_keywords: HashSet<String>Keywords this card is prevented from having.
intensity: i32Intensity marker value.
surveilled: boolCard was surveilled this turn.
milled: boolCard was milled this turn.
visited_this_turn: boolAttraction visited this turn.
times_crewed_this_turn: u32Number of times this permanent has crewed this turn.
is_crewed: boolWhether this permanent is currently crewed.
ignore_legend_rule_flag: boolWhether this card should ignore legend rule checks.
ability_activated_this_turn: u32Ability activation counts this turn.
ability_resolved_this_turn: u32Ability resolution counts this turn.
number_turn_activations: ActivationTableJava parity: per-ability activation tracking this turn.
number_game_activations: ActivationTableJava parity: per-ability activation tracking this game.
number_ability_resolved: ActivationTableJava parity: per-ability resolution tracking this turn.
planeswalker_abilities_activated: u32Planeswalker activation count this turn.
planeswalker_activation_limit_used: boolWhether a static effect’s increased planeswalker activation limit was used this turn.
chosen_modes_turn: Option<u32>Chosen mode count tracking turn marker.
enlisted_this_combat: boolSet when this creature enlisted another creature in the current combat.
activations_this_game: BTreeMap<usize, u32>Per-ability activation count this game (for PowerUp once-per-game restriction).
is_renowned: boolTrue once Renown has triggered (creature dealt combat damage to a player).
Mirrors Java Card.isRenowned().
zone_timestamp: u64Monotonically increasing timestamp set each time the card enters a zone.
Used to order same-player triggers by zone entry order, matching
Java’s Zone.cardList insertion order used by forEachCardInGame.