namespace SVSim.BattleNode.Lifecycle; /// /// Named constants and templates for the v1 scripted lifecycle. Every value here /// originated in a real prod frame in /// data_dumps/captures/battle-traffic_tk2_regular.ndjson; pulling them out /// of makes the magic numerics navigable and gives /// the seed a single source of truth instead of two duplicated literals. /// internal static class ScriptedProfiles { // Shared per the spec — selfInfo.seed and oppoInfo.seed always agree. // From frame[2] (Matched). public const long BattleSeed = 17_548_138L; // From frame[5] (BattleStart). Hardcoded; see spec §Deferred plumbing — sourcing these // from real per-viewer state needs a TK2 rank/battle-point tracker. public const string PlayerRank = "10"; public const string PlayerBattlePoint = "6270"; // From frame[8] (Ready). Provenance is "what prod sent"; the client // doesn't validate, but echoing matches the capture protects against // a regression on a future tightening. public const int ReadyIdxChangeSeed = 771_335_280; public const int ReadySpin = 243; // Generic non-zero spin that lands the client in "Opponent's turn..." // display state. v1 doesn't simulate the opponent — once this lands, // the client sits there indefinitely. public const int OpponentTurnStartSpin = 100; /// /// Server-pushed Judge frame spin value. Prod varies per push (55, 175, 73, ...) — it's /// an animation seed, not a stateful value. Fixed at 100 here for test stability; /// the client's JudgeOperation doesn't read it. /// public const int OpponentJudgeSpin = 100; }