Introduction
A while back, when maimai updated to DX2026, there was a special partner liz. Perhaps because SEGA/Wahlap cares about the special nature of the kaleidcsope mode, or perhaps because it had become too widespread, on July 22 Wahlap issued bs1 bans to every CN-server account that had illegitimately obtained the liz partner. The last time this kind of official statement handing out bs happened was probably the 2024 stamp-card song latent kingdom. So I believe many people are curious about the CN server’s ban system, and some even try to modify bs1 away using tech. This article will briefly cover the things about banState that you want to know
What is banState
CN server accounts have a field called banState, the ban state, which is issued by the server
| Value | Name | Effect |
|---|---|---|
0 | Normal | No restrictions whatsoever |
1 | Warning (bs1) | Warning popup, wait 10 seconds, can enter the game, but game features are restricted |
2 | Ban (bs2) | Ban popup, wait 10 seconds, kicked back to the QR scan page, cannot play |
Any other value is handled as normal by the client
This field is returned by the server when you scan your code; the client only executes it
What happens when you tap your card
After scanning, the machine requests preview data from the server once, and the response carries banState. Once the client gets this value, it runs a state machine to decide how your account is handled
Normal (0): enter the game directly
Warning (bs1): a warning window pops up, wait a full 600 frames (10 seconds at 60fps) for the window to close automatically, after which you’re let through to the song selection screen
Ban (bs2): a ban window pops up, again wait 10 seconds. After it closes, it directly calls Context.SetState(StateType.ConfirmEntry) to kick you out and stop you playing
The full data GetUserDataApi for a bs2 account is still downloaded as usual; data downloads are not intercepted, it’s just that even after downloading you still can’t play
Gameplay restrictions
After warned and banned accounts enter the game (bs2 can’t get in, but if the entrance is bypassed in any way), three kinds of checks are triggered. The condition is uniformly BanState != 0, and both players are checked: if either side is marked, both are restricted
1. Friend versus disabled
if (!IsAnyUserWarningState()){ AddVsGhost(...); AddMapGhost(...); AddBossGhost(...); AddReliefGhost(...);}As above, friend versus and other modes are directly disabled
2. kaleidxscope progress locked
The kaleidoscope progress is forcibly rolled back to the FoundCenterTower stage, and any progress at CenterTowerCleared or above is not displayed at all:
if (kaleidxScopePhase >= KaleidxScopePhase.CenterTowerCleared && IsEntryBanUser()){ kaleidxScopePhase = KaleidxScopePhase.FoundCenterTower;}3. LEGEND
UnlockMusicProcess.IsAnyLegend checks the BanState of all players; if either side is non-zero it returns false: it doesn’t count toward the LEGEND rank, and the conduction is voided
Pure server-side control
There is no way to change the bs state, because this thing is controlled server-side. Even if you use mitm to change the bs state passed down to 0, you can’t actually change the value in the server — it’s pure self-deception
Conclusion
| bs0 Normal | bs1 Warning | bs2 Ban | |
|---|---|---|---|
| Enter game | ✅ | ✅ (10s penalty wait) | ❌ |
| Friend versus | ✅ | ❌ | ❌ |
| Kaleidoscope progress | Normal | Locked | Locked |
| LEGEND | ✅ | ❌ | ❌ |
False bans are just waiting for a misunderstanding
