diff --git a/SVSim.BattleNode/Bridge/BattleModes.cs b/SVSim.BattleNode/Bridge/BattleModes.cs
new file mode 100644
index 0000000..fbd4f13
--- /dev/null
+++ b/SVSim.BattleNode/Bridge/BattleModes.cs
@@ -0,0 +1,14 @@
+namespace SVSim.BattleNode.Bridge;
+
+///
+/// Known values for — the prod do_matching battle-mode id,
+/// forwarded verbatim onto the wire (battleType field on BattleStart). Names the otherwise
+/// magic 11. Distinct from the enum (Pvp/Bot), which is the
+/// session topology, not the game mode.
+///
+public static class BattleModes
+{
+ /// Take Two (TK2) — the two-pick draft mode the v1 captures were taken from. Prod
+ /// rank-battle frames carry the same value (see MatchContextBuilder).
+ public const int TakeTwo = 11;
+}
diff --git a/SVSim.BattleNode/Bridge/MatchContext.cs b/SVSim.BattleNode/Bridge/MatchContext.cs
index 62a6862..adb7098 100644
--- a/SVSim.BattleNode/Bridge/MatchContext.cs
+++ b/SVSim.BattleNode/Bridge/MatchContext.cs
@@ -25,5 +25,8 @@ public sealed record MatchContext(
int FieldId,
int IsOfficial, // 0 or 1
- // Battle-mode hint, currently TK2 == 11. Future modes populate their own value.
- int BattleType);
+ // Battle-mode hint (the prod do_matching mode id). Named BattleModeId, NOT BattleType, to
+ // avoid colliding with the enum (Pvp/Bot) — a different axis.
+ // Known values live in (currently just TK2 == 11). Future modes add
+ // their own constant.
+ int BattleModeId);
diff --git a/SVSim.BattleNode/Lifecycle/ServerBattleFrames.cs b/SVSim.BattleNode/Lifecycle/ServerBattleFrames.cs
index 9495082..886c640 100644
--- a/SVSim.BattleNode/Lifecycle/ServerBattleFrames.cs
+++ b/SVSim.BattleNode/Lifecycle/ServerBattleFrames.cs
@@ -55,7 +55,7 @@ public static class ServerBattleFrames
EnvelopeForPush(NetworkBattleUri.BattleStart,
new BattleStartBody(
TurnState: turnState, // First = this side goes first, Second = second. Caller decides.
- BattleType: selfCtx.BattleType,
+ BattleModeId: selfCtx.BattleModeId,
SelfInfo: new BattleStartSelfInfo(
Rank: BattleFrameDefaults.PlayerRank,
BattlePoint: BattleFrameDefaults.PlayerBattlePoint,
diff --git a/SVSim.BattleNode/Protocol/Bodies/BattleStartBody.cs b/SVSim.BattleNode/Protocol/Bodies/BattleStartBody.cs
index b549118..ca425b9 100644
--- a/SVSim.BattleNode/Protocol/Bodies/BattleStartBody.cs
+++ b/SVSim.BattleNode/Protocol/Bodies/BattleStartBody.cs
@@ -5,7 +5,9 @@ namespace SVSim.BattleNode.Protocol.Bodies;
public sealed record BattleStartBody(
[property: JsonPropertyName("turnState")]
[property: JsonConverter(typeof(JsonNumberEnumConverter))] TurnState TurnState,
- [property: JsonPropertyName("battleType")] int BattleType,
+ // Wire key stays "battleType" (the client's contract); the CLR name is BattleModeId so the
+ // project keeps one meaning of "BattleType" — the Sessions.BattleType enum (Pvp/Bot).
+ [property: JsonPropertyName("battleType")] int BattleModeId,
[property: JsonPropertyName("selfInfo")] BattleStartSelfInfo SelfInfo,
[property: JsonPropertyName("oppoInfo")] BattleStartOppoInfo OppoInfo,
[property: JsonPropertyName("resultCode")] int ResultCode = (int)ReceiveNodeResultCode.Success) : IMsgBody;
diff --git a/SVSim.BattleNode/Sessions/Participants/NoOpBotParticipant.cs b/SVSim.BattleNode/Sessions/Participants/NoOpBotParticipant.cs
index ca7cbd5..f5e791a 100644
--- a/SVSim.BattleNode/Sessions/Participants/NoOpBotParticipant.cs
+++ b/SVSim.BattleNode/Sessions/Participants/NoOpBotParticipant.cs
@@ -23,7 +23,7 @@ public sealed class NoOpBotParticipant : IBattleParticipant
ClassId: "0", CharaId: "0", CardMasterName: BotCardMasterName,
CountryCode: "", UserName: "Bot", SleeveId: "0",
EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0,
- BattleType: 0);
+ BattleModeId: 0);
// Required by IBattleParticipant, but a silent bot never raises it — suppress the
// "event is never used" warning rather than keeping a dead null-emitting method.
diff --git a/SVSim.EmulatedEntrypoint/Services/MatchContextBuilder.cs b/SVSim.EmulatedEntrypoint/Services/MatchContextBuilder.cs
index aee4b65..bb18a64 100644
--- a/SVSim.EmulatedEntrypoint/Services/MatchContextBuilder.cs
+++ b/SVSim.EmulatedEntrypoint/Services/MatchContextBuilder.cs
@@ -67,7 +67,7 @@ public class MatchContextBuilder : IMatchContextBuilder
// Hardcoded v1; needs equipped-MyPageBackground lookup (see spec §Deferred).
FieldId: 43,
IsOfficial: viewer.Info.IsOfficial ? 1 : 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
}
public async Task BuildForRankBattleAsync(long viewerId, Format format, int deckNo)
@@ -114,6 +114,6 @@ public class MatchContextBuilder : IMatchContextBuilder
DegreeId: degreeId,
FieldId: 43,
IsOfficial: viewer.Info.IsOfficial ? 1 : 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
}
}
diff --git a/SVSim.UnitTests/BattleNode/Bridge/MatchingBridgeTests.cs b/SVSim.UnitTests/BattleNode/Bridge/MatchingBridgeTests.cs
index 84ac36a..e45faba 100644
--- a/SVSim.UnitTests/BattleNode/Bridge/MatchingBridgeTests.cs
+++ b/SVSim.UnitTests/BattleNode/Bridge/MatchingBridgeTests.cs
@@ -96,5 +96,5 @@ public class MatchingBridgeTests
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "Player", SleeveId: "3000011",
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
}
diff --git a/SVSim.UnitTests/BattleNode/Hosting/WaitingRoomTests.cs b/SVSim.UnitTests/BattleNode/Hosting/WaitingRoomTests.cs
index 775f041..36456bc 100644
--- a/SVSim.UnitTests/BattleNode/Hosting/WaitingRoomTests.cs
+++ b/SVSim.UnitTests/BattleNode/Hosting/WaitingRoomTests.cs
@@ -72,7 +72,7 @@ public class WaitingRoomTests
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "Player", SleeveId: "0",
EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
return new RealParticipant(ws, viewerId, ctx, NullLogger.Instance);
}
}
diff --git a/SVSim.UnitTests/BattleNode/Integration/BattleNodeFlowTests.cs b/SVSim.UnitTests/BattleNode/Integration/BattleNodeFlowTests.cs
index 081d47a..61d3689 100644
--- a/SVSim.UnitTests/BattleNode/Integration/BattleNodeFlowTests.cs
+++ b/SVSim.UnitTests/BattleNode/Integration/BattleNodeFlowTests.cs
@@ -26,7 +26,7 @@ public class BattleNodeFlowTests
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "Player", SleeveId: "3000011",
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
///
/// End-to-end: a viewer with a real TK2 run sees their drafted card-ids in the Matched
diff --git a/SVSim.UnitTests/BattleNode/Lifecycle/ServerBattleFramesTests.cs b/SVSim.UnitTests/BattleNode/Lifecycle/ServerBattleFramesTests.cs
index 8bdd2af..c2cb3bc 100644
--- a/SVSim.UnitTests/BattleNode/Lifecycle/ServerBattleFramesTests.cs
+++ b/SVSim.UnitTests/BattleNode/Lifecycle/ServerBattleFramesTests.cs
@@ -69,22 +69,22 @@ public class ServerBattleFramesTests
}
[Test]
- public void BuildBattleStart_HasTurnStateZero_AndUsesContextBattleType()
+ public void BuildBattleStart_HasTurnStateZero_AndUsesContextBattleModeId()
{
var env = ServerBattleFrames.BuildBattleStart(FixtureCtx(), FakeOpponentCtx(), selfViewerId: 1, turnState: TurnState.First);
var body = (BattleStartBody)env.Body;
Assert.That(body.TurnState, Is.EqualTo(TurnState.First));
- Assert.That(body.BattleType, Is.EqualTo(11));
+ Assert.That(body.BattleModeId, Is.EqualTo(BattleModes.TakeTwo));
}
[Test]
- public void BuildBattleStart_class_chara_cardMaster_battleType_flow_from_context()
+ public void BuildBattleStart_class_chara_cardMaster_battleModeId_flow_from_context()
{
var ctx = FixtureCtx() with
{
ClassId = "7", CharaId = "5000123",
CardMasterName = "card_master_test_v2",
- BattleType = 42,
+ BattleModeId = 42,
};
var env = ServerBattleFrames.BuildBattleStart(ctx, FakeOpponentCtx(), selfViewerId: 1, turnState: TurnState.First);
@@ -93,7 +93,7 @@ public class ServerBattleFramesTests
Assert.That(body.SelfInfo.ClassId, Is.EqualTo("7"));
Assert.That(body.SelfInfo.CharaId, Is.EqualTo("5000123"));
Assert.That(body.SelfInfo.CardMasterName, Is.EqualTo("card_master_test_v2"));
- Assert.That(body.BattleType, Is.EqualTo(42));
+ Assert.That(body.BattleModeId, Is.EqualTo(42));
}
[Test]
@@ -171,7 +171,7 @@ public class ServerBattleFramesTests
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "Player", SleeveId: "3000011",
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
// A prod-captured opponent MatchContext fixture that the BuildMatched/BuildBattleStart
// helpers read from for the oppo half.
@@ -180,5 +180,5 @@ public class ServerBattleFramesTests
ClassId: "8", CharaId: "8", CardMasterName: "card_master_node_10015",
CountryCode: "JPN", UserName: "Opponent", SleeveId: "704141010",
EmblemId: "400001100", DegreeId: "120027", FieldId: 5, IsOfficial: 0,
- BattleType: 0);
+ BattleModeId: 0);
}
diff --git a/SVSim.UnitTests/BattleNode/Lifecycle/TypedBodyWireShapeTests.cs b/SVSim.UnitTests/BattleNode/Lifecycle/TypedBodyWireShapeTests.cs
index 2eb2417..3519e34 100644
--- a/SVSim.UnitTests/BattleNode/Lifecycle/TypedBodyWireShapeTests.cs
+++ b/SVSim.UnitTests/BattleNode/Lifecycle/TypedBodyWireShapeTests.cs
@@ -158,7 +158,7 @@ public class TypedBodyWireShapeTests
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "Player", SleeveId: "3000011",
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
// Prod-captured opponent fixture — 30-card deck and the prod-captured opponent
// cosmetics (ClassId/CharaId "8") so the wire bytes asserted below (oppoInfo classId/charaId,
@@ -169,5 +169,5 @@ public class TypedBodyWireShapeTests
ClassId: "8", CharaId: "8", CardMasterName: "card_master_node_10015",
CountryCode: "JPN", UserName: "Opponent", SleeveId: "704141010",
EmblemId: "400001100", DegreeId: "120027", FieldId: 5, IsOfficial: 0,
- BattleType: 0);
+ BattleModeId: 0);
}
diff --git a/SVSim.UnitTests/BattleNode/Protocol/Bodies/BattleStartBodyTests.cs b/SVSim.UnitTests/BattleNode/Protocol/Bodies/BattleStartBodyTests.cs
index c49d597..fa672d7 100644
--- a/SVSim.UnitTests/BattleNode/Protocol/Bodies/BattleStartBodyTests.cs
+++ b/SVSim.UnitTests/BattleNode/Protocol/Bodies/BattleStartBodyTests.cs
@@ -1,6 +1,7 @@
using System.Text.Json;
using System.Text.Json.Nodes;
using NUnit.Framework;
+using SVSim.BattleNode.Bridge;
using SVSim.BattleNode.Protocol;
using SVSim.BattleNode.Protocol.Bodies;
@@ -13,7 +14,7 @@ public class BattleStartBodyTests
public void Serializes_TopLevelFields_WithCorrectWireKeys()
{
var body = new BattleStartBody(
- TurnState: TurnState.First, BattleType: 11,
+ TurnState: TurnState.First, BattleModeId: BattleModes.TakeTwo,
SelfInfo: new BattleStartSelfInfo("10", "6270", "1", "1", "card_master_node_10015"),
OppoInfo: new BattleStartOppoInfo("1", "0", 0, "0", "8", "8", "card_master_node_10015"));
diff --git a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchConcurrencyTests.cs b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchConcurrencyTests.cs
index 56363dc..87fe7eb 100644
--- a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchConcurrencyTests.cs
+++ b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchConcurrencyTests.cs
@@ -64,13 +64,13 @@ public class BattleSessionDispatchConcurrencyTests
SelfDeckCardIds: Enumerable.Range(1, 30).Select(_ => 100_011_010L).ToList(),
ClassId: "3", CharaId: "3", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "PlayerA", SleeveId: "3000011",
- EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0, BattleType: 11);
+ EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0, BattleModeId: BattleModes.TakeTwo);
private static MatchContext CtxB() => new(
SelfDeckCardIds: Enumerable.Range(1, 30).Select(_ => 200_011_010L).ToList(),
ClassId: "5", CharaId: "5", CardMasterName: "card_master_node_10015",
CountryCode: "JPN", UserName: "PlayerB", SleeveId: "3000022",
- EmblemId: "701441022", DegreeId: "300004", FieldId: 44, IsOfficial: 0, BattleType: 11);
+ EmblemId: "701441022", DegreeId: "300004", FieldId: 44, IsOfficial: 0, BattleModeId: BattleModes.TakeTwo);
/// Tracks the peak number of dispatches in flight at once. Records the count under a
/// short lock, then holds (outside the lock) to widen the overlap window so a serialization bug
diff --git a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs
index 7270204..e69fca9 100644
--- a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs
+++ b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionDispatchTests.cs
@@ -894,7 +894,7 @@ public class BattleSessionDispatchTests
SelfDeckCardIds: Array.Empty(),
ClassId: "0", CharaId: "0", CardMasterName: "card_master_node_10015",
CountryCode: "", UserName: "Bot", SleeveId: "0",
- EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0, BattleType: 0);
+ EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0, BattleModeId: 0);
[Test]
public void Bot_InitNetwork_acks_to_sender()
@@ -1051,21 +1051,21 @@ public class BattleSessionDispatchTests
ClassId: "3", CharaId: "3", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "PlayerA", SleeveId: "3000011",
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
private static MatchContext PlayerBCtx() => new(
SelfDeckCardIds: Enumerable.Range(1, 30).Select(_ => 200_011_010L).ToList(),
ClassId: "5", CharaId: "5", CardMasterName: "card_master_node_10015",
CountryCode: "JPN", UserName: "PlayerB", SleeveId: "3000022",
EmblemId: "701441022", DegreeId: "300004", FieldId: 44, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
private static MatchContext FixtureCtx() => new(
SelfDeckCardIds: Enumerable.Range(1, 30).Select(_ => 100_011_010L).ToList(),
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "Player", SleeveId: "3000011",
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
private static MsgEnvelope NewEnvelope(NetworkBattleUri uri) =>
new(uri, ViewerId: 1, Uuid: "u", Bid: null, RetryAttempt: 0,
diff --git a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionStateTests.cs b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionStateTests.cs
index 13ff0b0..59a9711 100644
--- a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionStateTests.cs
+++ b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionStateTests.cs
@@ -24,7 +24,7 @@ public class BattleSessionStateTests
private static MatchContext Ctx(params long[] deck) => new(
SelfDeckCardIds: deck, ClassId: "1", CharaId: "1", CardMasterName: "cm",
CountryCode: "KOR", UserName: "P", SleeveId: "0", EmblemId: "0", DegreeId: "0",
- FieldId: 0, IsOfficial: 0, BattleType: 11);
+ FieldId: 0, IsOfficial: 0, BattleModeId: BattleModes.TakeTwo);
[Test]
public void GetOrSeedDeckMap_maps_idx_1based_to_the_shuffled_order()
diff --git a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionTerminateCascadeTests.cs b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionTerminateCascadeTests.cs
index fd92574..7d2574d 100644
--- a/SVSim.UnitTests/BattleNode/Sessions/BattleSessionTerminateCascadeTests.cs
+++ b/SVSim.UnitTests/BattleNode/Sessions/BattleSessionTerminateCascadeTests.cs
@@ -54,5 +54,5 @@ public class BattleSessionTerminateCascadeTests
SelfDeckCardIds: Array.Empty(),
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "JP", UserName: "Test", SleeveId: "0",
- EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0, BattleType: 11);
+ EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0, BattleModeId: BattleModes.TakeTwo);
}
diff --git a/SVSim.UnitTests/BattleNode/Sessions/InMemoryBattleSessionStoreTests.cs b/SVSim.UnitTests/BattleNode/Sessions/InMemoryBattleSessionStoreTests.cs
index 1460006..c7e8cf5 100644
--- a/SVSim.UnitTests/BattleNode/Sessions/InMemoryBattleSessionStoreTests.cs
+++ b/SVSim.UnitTests/BattleNode/Sessions/InMemoryBattleSessionStoreTests.cs
@@ -48,5 +48,5 @@ public class InMemoryBattleSessionStoreTests
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "Player", SleeveId: "3000011",
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
}
diff --git a/SVSim.UnitTests/BattleNode/Sessions/Participants/RealParticipantHandEventTests.cs b/SVSim.UnitTests/BattleNode/Sessions/Participants/RealParticipantHandEventTests.cs
index ee77949..29ff307 100644
--- a/SVSim.UnitTests/BattleNode/Sessions/Participants/RealParticipantHandEventTests.cs
+++ b/SVSim.UnitTests/BattleNode/Sessions/Participants/RealParticipantHandEventTests.cs
@@ -150,5 +150,5 @@ public class RealParticipantHandEventTests
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "Player", SleeveId: "3000011",
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
}
diff --git a/SVSim.UnitTests/BattleNode/Sessions/Participants/RealParticipantTests.cs b/SVSim.UnitTests/BattleNode/Sessions/Participants/RealParticipantTests.cs
index e7d3058..dc6c366 100644
--- a/SVSim.UnitTests/BattleNode/Sessions/Participants/RealParticipantTests.cs
+++ b/SVSim.UnitTests/BattleNode/Sessions/Participants/RealParticipantTests.cs
@@ -174,7 +174,7 @@ public class RealParticipantTests
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "Player", SleeveId: "3000011",
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
private static MsgEnvelope NewEnvelope(NetworkBattleUri uri) =>
new(uri, ViewerId: 1, Uuid: "u", Bid: null, RetryAttempt: 0,
diff --git a/SVSim.UnitTests/Matching/BotRosterTests.cs b/SVSim.UnitTests/Matching/BotRosterTests.cs
index 0f4601e..900e0d5 100644
--- a/SVSim.UnitTests/Matching/BotRosterTests.cs
+++ b/SVSim.UnitTests/Matching/BotRosterTests.cs
@@ -14,7 +14,7 @@ public class BotRosterTests
SelfDeckCardIds: Array.Empty(),
ClassId: classId, CharaId: classId, CardMasterName: "card_master_node_10015",
CountryCode: "JP", UserName: userName, SleeveId: "0",
- EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0, BattleType: 11);
+ EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0, BattleModeId: BattleModes.TakeTwo);
private static async Task NewRosterAsync(SVSimTestFactory factory)
{
diff --git a/SVSim.UnitTests/Matching/InProcessPairUpRankFallbackTests.cs b/SVSim.UnitTests/Matching/InProcessPairUpRankFallbackTests.cs
index 6c3da6d..ad27463 100644
--- a/SVSim.UnitTests/Matching/InProcessPairUpRankFallbackTests.cs
+++ b/SVSim.UnitTests/Matching/InProcessPairUpRankFallbackTests.cs
@@ -48,7 +48,7 @@ public class InProcessPairUpRankFallbackTests
SelfDeckCardIds: Array.Empty(), ClassId: "0", CharaId: "0",
CardMasterName: "card_master_node_10015",
CountryCode: "JP", UserName: $"P{id}", SleeveId: "0",
- EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0, BattleType: 11));
+ EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0, BattleModeId: BattleModes.TakeTwo));
[Test]
public async Task TK2_policy_is_PvpOnly_no_fallback_regression()
diff --git a/SVSim.UnitTests/Matching/InProcessPairUpTests.cs b/SVSim.UnitTests/Matching/InProcessPairUpTests.cs
index 4b54f2f..d43b360 100644
--- a/SVSim.UnitTests/Matching/InProcessPairUpTests.cs
+++ b/SVSim.UnitTests/Matching/InProcessPairUpTests.cs
@@ -94,5 +94,5 @@ public class InProcessPairUpTests
ClassId: "1", CharaId: "1", CardMasterName: "card_master_node_10015",
CountryCode: "KOR", UserName: "Player", SleeveId: "3000011",
EmblemId: "701441011", DegreeId: "300003", FieldId: 43, IsOfficial: 0,
- BattleType: 11);
+ BattleModeId: BattleModes.TakeTwo);
}
diff --git a/SVSim.UnitTests/Matching/MatchingResolverTests.cs b/SVSim.UnitTests/Matching/MatchingResolverTests.cs
index 8edeedb..fb2f6db 100644
--- a/SVSim.UnitTests/Matching/MatchingResolverTests.cs
+++ b/SVSim.UnitTests/Matching/MatchingResolverTests.cs
@@ -31,7 +31,7 @@ public class MatchingResolverTests
SelfDeckCardIds: Array.Empty(), ClassId: "0", CharaId: "0",
CardMasterName: "card_master_node_10015",
CountryCode: "JP", UserName: $"P{vid}", SleeveId: "0",
- EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0, BattleType: 11));
+ EmblemId: "0", DegreeId: "0", FieldId: 0, IsOfficial: 0, BattleModeId: BattleModes.TakeTwo));
[Test]
public async Task When_neither_flag_set_calls_pairUp_and_parks_returns_3002_with_empty_url()
diff --git a/SVSim.UnitTests/Services/MatchContextBuilderTests.cs b/SVSim.UnitTests/Services/MatchContextBuilderTests.cs
index 9667de0..ad8228d 100644
--- a/SVSim.UnitTests/Services/MatchContextBuilderTests.cs
+++ b/SVSim.UnitTests/Services/MatchContextBuilderTests.cs
@@ -64,7 +64,7 @@ public class MatchContextBuilderTests
Assert.That(ctx.EmblemId, Is.EqualTo(emblemId.ToString()));
Assert.That(ctx.DegreeId, Is.EqualTo(degreeId.ToString()));
Assert.That(ctx.IsOfficial, Is.EqualTo(0));
- Assert.That(ctx.BattleType, Is.EqualTo(11));
+ Assert.That(ctx.BattleModeId, Is.EqualTo(BattleModes.TakeTwo));
// Hardcoded v1 fixtures (see spec §Deferred plumbing)
Assert.That(ctx.CardMasterName, Is.EqualTo("card_master_node_10015"));
Assert.That(ctx.FieldId, Is.EqualTo(43));
@@ -131,7 +131,7 @@ public class MatchContextBuilderTests
var ctx = await builder.BuildForRankBattleAsync(viewerId, Format.Rotation, deckNo: 1);
Assert.That(ctx.UserName, Is.EqualTo("Ranker"));
- Assert.That(ctx.BattleType, Is.EqualTo(11), "BattleType=11 matches the prod rank-battle wire value (same as TK2).");
+ Assert.That(ctx.BattleModeId, Is.EqualTo(BattleModes.TakeTwo), "rank-battle carries the same mode id as TK2 on the wire.");
Assert.That(ctx.ClassId, Is.Not.Null.And.Not.Empty, "ClassId from the selected deck's class.");
Assert.That(ctx.CardMasterName, Is.EqualTo("card_master_node_10015"));
Assert.That(ctx.FieldId, Is.EqualTo(43));