//! @generated by tools/sync_metadata.py on 2026-03-19T22:09:45.017134 #![allow(unused_imports)] use serde::{Deserialize, Serialize}; use serde_repr::{Deserialize_repr, Serialize_repr}; pub use crate::core::generated_constants::*; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr, Default)] #[repr(u8)] pub enum TriggerType { #[default] None = 0, OnPlay = 1, OnLiveStart = 2, OnLiveSuccess = 3, TurnStart = 4, TurnEnd = 5, Constant = 6, Activated = 7, OnLeaves = 8, OnReveal = 9, OnPositionChange = 10, OnAbilityResolve = 11, OnAbilitySuccess = 12, OnMoveToDiscard = 13, OnMemberTap = 14, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr, Default)] #[repr(u8)] pub enum TargetType { #[default] Self_ = 0, Player = 1, Opponent = 2, AllPlayers = 3, MemberSelf = 4, MemberOther = 5, CardHand = 6, CardDiscard = 7, CardDeckTop = 8, OpponentHand = 9, MemberSelect = 10, MemberNamed = 11, OpponentMember = 12, PlayerSelect = 20, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr, Default)] #[repr(u8)] pub enum EffectType { #[default] Nop = 0, Return = 1, Jump = 2, JumpIfFalse = 3, Draw = 10, AddBlades = 11, AddHearts = 12, ReduceCost = 13, LookDeck = 14, RecoverLive = 15, BoostScore = 16, RecoverMember = 17, BuffPower = 18, Immunity = 19, MoveMember = 20, SwapCards = 21, SearchDeck = 22, EnergyCharge = 23, SetBlades = 24, SetHearts = 25, FormationChange = 26, NegateEffect = 27, OrderDeck = 28, MetaRule = 29, SelectMode = 30, MoveToDeck = 31, TapOpponent = 32, PlaceUnder = 33, FlavorAction = 34, Restriction = 35, BatonTouchMod = 36, SetScore = 37, SwapZone = 38, TransformColor = 39, RevealCards = 40, LookAndChoose = 41, CheerReveal = 42, ActivateMember = 43, AddToHand = 44, ColorSelect = 45, TriggerRemote = 47, ReduceHeartReq = 48, ModifyScoreRule = 49, AddStageEnergy = 50, SetTapped = 51, TapMember = 53, PlayMemberFromHand = 57, MoveToDiscard = 58, GrantAbility = 60, IncreaseHeartCost = 61, ReduceYellCount = 62, PlayMemberFromDiscard = 63, PayEnergy = 64, SelectMember = 65, DrawUntil = 66, SelectPlayer = 67, SelectLive = 68, RevealUntil = 69, IncreaseCost = 70, PreventPlayToSlot = 71, SwapArea = 72, TransformHeart = 73, SelectCards = 74, OpponentChoose = 75, PlayLiveFromDiscard = 76, ReduceLiveSetLimit = 77, SetTargetSelf = 78, SetTargetOpponent = 79, PreventSetToSuccessPile = 80, ActivateEnergy = 81, PreventActivate = 82, SetHeartCost = 83, PreventBatonTouch = 90, LookDeckDynamic = 91, ReduceScore = 92, RepeatAbility = 93, LoseExcessHearts = 94, SkipActivatePhase = 95, PayEnergyDynamic = 96, PlaceEnergyUnderMember = 97, CalcSumCost = 106, LookReorderDiscard = 125, DivValue = 126, TransformBlades = 127, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr, Default)] #[repr(u16)] pub enum ConditionType { #[default] None = 0, Turn1 = 200, HasMember = 201, HasColor = 202, CountStage = 203, CountHand = 204, CountDiscard = 205, IsCenter = 206, LifeLead = 207, CountGroup = 208, GroupFilter = 209, OpponentHas = 210, SelfIsGroup = 211, ModalAnswer = 212, CountEnergy = 213, HasLiveCard = 214, CostCheck = 215, RarityCheck = 216, HandHasNoLive = 217, CountSuccessLive = 218, OpponentHandDiff = 219, ScoreCompare = 220, HasChoice = 221, OpponentChoice = 222, CountHearts = 223, CountBlades = 224, OpponentEnergyDiff = 225, HasKeyword = 226, DeckRefreshed = 227, HasMoved = 228, HandIncreased = 229, CountLiveZone = 230, CountUniqueColors = 250, Baton = 231, TypeCheck = 232, IsInDiscard = 233, AreaCheck = 234, CostLead = 235, ScoreLead = 236, HeartLead = 237, HasExcessHeart = 238, NotHasExcessHeart = 239, TotalBlades = 240, CostCompare = 241, BladeCompare = 242, HeartCompare = 243, OpponentHasWait = 244, IsTapped = 245, IsActive = 246, LivePerformed = 247, IsPlayer = 248, IsOpponent = 249, CountEnergyExact = 301, CountBladeHeartTypes = 302, OpponentHasExcessHeart = 303, ScoreTotalCheck = 304, MainPhase = 305, SelectMember = 306, SuccessPileCount = 307, IsSelfMove = 308, DiscardedCards = 309, YellRevealedUniqueColors = 310, SyncCost = 311, SumValue = 312, IsWait = 313, OnAbilityResolve = 314, TargetMemberHasNoHearts = 315, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr, Default)] #[repr(u8)] pub enum AbilityCostType { #[default] None = 0, Energy = 1, TapSelf = 2, DiscardHand = 3, ReturnHand = 4, SacrificeSelf = 5, RevealHandAll = 6, SacrificeUnder = 7, DiscardEnergy = 8, RevealHand = 9, TapMember = 20, TapEnergy = 21, RestMember = 22, ReturnMemberToHand = 23, DiscardMember = 24, DiscardLive = 25, RemoveLive = 26, RemoveMember = 27, ReturnLiveToHand = 28, ReturnLiveToDeck = 29, ReturnMemberToDeck = 30, PlaceMemberFromHand = 31, PlaceLiveFromHand = 32, PlaceEnergyFromHand = 33, PlaceMemberFromDiscard = 34, PlaceLiveFromDiscard = 35, PlaceEnergyFromDiscard = 36, PlaceMemberFromDeck = 37, PlaceLiveFromDeck = 38, PlaceEnergyFromDeck = 39, ShuffleDeck = 41, DrawCard = 42, DiscardTopDeck = 43, RemoveTopDeck = 44, ReturnDiscardToDeck = 45, ReturnRemovedToDeck = 46, ReturnRemovedToHand = 47, ReturnRemovedToDiscard = 48, PlaceEnergyFromSuccess = 49, DiscardSuccessLive = 50, RemoveSuccessLive = 51, ReturnSuccessLiveToHand = 52, ReturnSuccessLiveToIndex = 53, ReturnSuccessLiveToDiscard = 54, PlaceMemberFromSuccess = 55, PlaceLiveFromSuccess = 56, PlaceEnergyFromRemoved = 57, PlaceMemberFromRemoved = 58, PlaceLiveFromRemoved = 59, ReturnEnergyToDeck = 60, ReturnEnergyToHand = 61, RemoveEnergy = 62, ReturnStageEnergyToDeck = 63, ReturnStageEnergyToHand = 64, DiscardStageEnergy = 65, RemoveStageEnergy = 66, PlaceEnergyFromStageEnergy = 67, PlaceMemberFromStageEnergy = 68, PlaceLiveFromStageEnergy = 69, PlaceEnergyFromHandToStageEnergy = 70, PlaceMemberFromHandToStageEnergy = 71, PlaceLiveFromHandToStageEnergy = 72, PlaceEnergyFromDiscardToStageEnergy = 73, PlaceMemberFromDiscardToStageEnergy = 74, PlaceLiveFromDiscardToStageEnergy = 75, PlaceEnergyFromDeckToStageEnergy = 76, PlaceMemberFromDeckToStageEnergy = 77, PlaceLiveFromDeckToStageEnergy = 78, PlaceEnergyFromSuccessToStageEnergy = 79, PlaceMemberFromSuccessToStageEnergy = 80, PlaceLiveFromSuccessToStageEnergy = 81, PlaceEnergyFromRemovedToStageEnergy = 82, PlaceMemberFromRemovedToStageEnergy = 83, PlaceLiveFromRemovedToStageEnergy = 84, ReturnLiveToDiscard = 85, ReturnLiveToRemoved = 86, ReturnLiveToSuccess = 87, ReturnMemberToDiscard = 88, ReturnMemberToRemoved = 89, ReturnMemberToSuccess = 90, ReturnEnergyToDiscard = 91, ReturnEnergyToRemoved = 92, ReturnEnergyToSuccess = 93, ReturnSuccessLiveToRemoved = 94, ReturnRemovedSuccess = 95, ReturnStageEnergyToDiscard = 96, ReturnStageEnergyToRemoved = 97, ReturnStageEnergyToSuccess = 98, ReturnDiscardToHand = 99, ReturnDiscardToRemoved = 100, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr, Default)] #[repr(u8)] pub enum ChoiceType { #[default] None = 0, Optional = 1, PayEnergy = 2, RevealHand = 3, SelectDiscard = 4, SelectSwapSource = 5, SelectStage = 6, SelectStageEmpty = 7, SelectLiveSlot = 8, SelectSwapTarget = 9, SelectMember = 10, SelectDiscardPlay = 11, SelectHandDiscard = 12, ColorSelect = 13, SelectMode = 14, OpponentChoose = 15, SelectCardsOrder = 16, TapO = 17, LookAndChoose = 18, SelectCards = 19, SelectPlayer = 20, SelectLive = 21, OrderDeck = 22, SelectHandPlay = 23, TapMSelect = 24, MoveMemberDest = 25, RecovL = 26, RecovM = 27, SelectStageEmptyBaton = 28, RearrangeFormation = 29, } impl ChoiceType { pub fn from_str(s: &str) -> Self { match s { "OPTIONAL" => ChoiceType::Optional, "PAY_ENERGY" => ChoiceType::PayEnergy, "REVEAL_HAND" => ChoiceType::RevealHand, "SELECT_DISCARD" => ChoiceType::SelectDiscard, "SELECT_SWAP_SOURCE" => ChoiceType::SelectSwapSource, "SELECT_STAGE" => ChoiceType::SelectStage, "SELECT_STAGE_EMPTY" => ChoiceType::SelectStageEmpty, "SELECT_LIVE_SLOT" => ChoiceType::SelectLiveSlot, "SELECT_SWAP_TARGET" => ChoiceType::SelectSwapTarget, "SELECT_MEMBER" => ChoiceType::SelectMember, "SELECT_DISCARD_PLAY" => ChoiceType::SelectDiscardPlay, "SELECT_HAND_DISCARD" => ChoiceType::SelectHandDiscard, "COLOR_SELECT" => ChoiceType::ColorSelect, "SELECT_MODE" => ChoiceType::SelectMode, "OPPONENT_CHOOSE" => ChoiceType::OpponentChoose, "SELECT_CARDS_ORDER" => ChoiceType::SelectCardsOrder, "TAP_O" => ChoiceType::TapO, "LOOK_AND_CHOOSE" => ChoiceType::LookAndChoose, "SELECT_CARDS" => ChoiceType::SelectCards, "SELECT_PLAYER" => ChoiceType::SelectPlayer, "SELECT_LIVE" => ChoiceType::SelectLive, "ORDER_DECK" => ChoiceType::OrderDeck, "SELECT_HAND_PLAY" => ChoiceType::SelectHandPlay, "TAP_M_SELECT" => ChoiceType::TapMSelect, "MOVE_MEMBER_DEST" => ChoiceType::MoveMemberDest, "RECOV_L" => ChoiceType::RecovL, "RECOV_M" => ChoiceType::RecovM, "SELECT_STAGE_EMPTY_BATON" => ChoiceType::SelectStageEmptyBaton, "REARRANGE_FORMATION" => ChoiceType::RearrangeFormation, _ => ChoiceType::None, } } pub fn as_str(&self) -> &'static str { match self { ChoiceType::Optional => "OPTIONAL", ChoiceType::PayEnergy => "PAY_ENERGY", ChoiceType::RevealHand => "REVEAL_HAND", ChoiceType::SelectDiscard => "SELECT_DISCARD", ChoiceType::SelectSwapSource => "SELECT_SWAP_SOURCE", ChoiceType::SelectStage => "SELECT_STAGE", ChoiceType::SelectStageEmpty => "SELECT_STAGE_EMPTY", ChoiceType::SelectLiveSlot => "SELECT_LIVE_SLOT", ChoiceType::SelectSwapTarget => "SELECT_SWAP_TARGET", ChoiceType::SelectMember => "SELECT_MEMBER", ChoiceType::SelectDiscardPlay => "SELECT_DISCARD_PLAY", ChoiceType::SelectHandDiscard => "SELECT_HAND_DISCARD", ChoiceType::ColorSelect => "COLOR_SELECT", ChoiceType::SelectMode => "SELECT_MODE", ChoiceType::OpponentChoose => "OPPONENT_CHOOSE", ChoiceType::SelectCardsOrder => "SELECT_CARDS_ORDER", ChoiceType::TapO => "TAP_O", ChoiceType::LookAndChoose => "LOOK_AND_CHOOSE", ChoiceType::SelectCards => "SELECT_CARDS", ChoiceType::SelectPlayer => "SELECT_PLAYER", ChoiceType::SelectLive => "SELECT_LIVE", ChoiceType::OrderDeck => "ORDER_DECK", ChoiceType::SelectHandPlay => "SELECT_HAND_PLAY", ChoiceType::TapMSelect => "TAP_M_SELECT", ChoiceType::MoveMemberDest => "MOVE_MEMBER_DEST", ChoiceType::RecovL => "RECOV_L", ChoiceType::RecovM => "RECOV_M", ChoiceType::SelectStageEmptyBaton => "SELECT_STAGE_EMPTY_BATON", ChoiceType::RearrangeFormation => "REARRANGE_FORMATION", ChoiceType::None => "NONE", } } } impl std::fmt::Display for ChoiceType { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.as_str()) } } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr, Default)] #[repr(i8)] pub enum Phase { #[default] Setup = -4, Rps = -3, TurnChoice = -2, MulliganP1 = -1, MulliganP2 = 0, Active = 1, Energy = 2, Draw = 3, Main = 4, LiveSet = 5, PerformanceP1 = 6, PerformanceP2 = 7, LiveResult = 8, Terminal = 9, Response = 10, } impl Phase { pub fn is_interactive(&self) -> bool { match self { Phase::Main | Phase::LiveSet | Phase::MulliganP1 | Phase::MulliganP2 | Phase::Response | Phase::LiveResult | Phase::Energy => true, _ => false, } } } #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr, Default)] #[repr(u8)] pub enum Zone { #[default] Default = 0, DeckTop = 1, DeckBottom = 2, Energy = 3, Stage = 4, Deck = 5, Hand = 6, Discard = 7, LiveSet = 13, SuccessPile = 16, Yell = 17, } pub fn get_group_name(id: u8, lang: &str) -> &'static str { match lang { "jp" => match id { 0 => "μ's", 1 => "Aqours", 2 => "虹ヶ咲学園スクールアイドル同好会", 3 => "Liella!", 4 => "蓮ノ空女学院スクールアイドルクラブ", 10 => "A-RISE", 11 => "Saint Snow", 12 => "Sunny Passion", 13 => "スクールアイドルミュージカル", 99 => "その他", 100 => "-", _ => "-", }, _ => match id { 0 => "μ's", 1 => "Aqours", 2 => "Nijigasaki High School Idol Club", 3 => "Liella!", 4 => "Hasunosora Girls' High School Idol Club", 10 => "A-RISE", 11 => "Saint Snow", 12 => "Sunny Passion", 13 => "School Idol Musical", 99 => "Other", 100 => "-", _ => "-", } } } pub fn get_unit_name(id: u8, lang: &str) -> &'static str { match lang { "jp" => match id { 0 => "Printemps", 1 => "lily white", 2 => "BiBi", 3 => "CYaRon!", 4 => "AZALEA", 5 => "Guilty Kiss", 6 => "DiverDiva", 7 => "A・ZU・NA", 8 => "QU4RTZ", 9 => "R3BIRTH", 10 => "CatChu!", 11 => "KALEIDOSCORE", 12 => "5yncri5e!", 13 => "スリーズブーケ", 14 => "DOLLCHESTRA", 15 => "みらぱーくらぶ", 16 => "エデルノート", 17 => "アアイスクリーム", 100 => "-", _ => "-", }, _ => match id { 0 => "Printemps", 1 => "lily white", 2 => "BiBi", 3 => "CYaRon!", 4 => "AZALEA", 5 => "Guilty Kiss", 6 => "DiverDiva", 7 => "A・ZU・NA", 8 => "QU4RTZ", 9 => "R3BIRTH", 10 => "CatChu!", 11 => "KALEIDOSCORE", 12 => "5yncri5e!", 13 => "Cerise Bouquet", 14 => "DOLLCHESTRA", 15 => "Mira-Cra Park!", 16 => "Edel Note", 17 => "Aiscream", 100 => "-", _ => "-", } } }