• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 06:13
CET 11:13
KST 19:13
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
[ASL22] Finals Preview: Sweet Victory!12[ASL22] Ro4 Preview: Mirror Mirror6[ASL22] Ro8 Preview: Within Reach5[ASL22] Ro8 Preview: In A Tizzy11[ASL22] Ro16 Preview: Holy Diver5
Community News
Weekly Cups (October 19-25): Clem triples first in 5.0.172Evil Geniuses - shutting down17ISSL (IntoTheTV x SOOP SC2 League): Premier5Weekly Cups (October 12-18): 5.0.17 era begins1[$1250] International ShieldBattery League87
StarCraft 2
General
No more SC2 streamers on team liquid? REPORT: StarCraft 2: Remastered In Development Weekly Cups (October 19-25): Clem triples first in 5.0.17 Evil Geniuses - shutting down How do you feel about the mass reverts in the 5.0.17 PTR?
Tourneys
RSL goes to London! 2026 Offline Finals Nov 21-22 ScienceCraft (October 24-25) - Live Event Sparkling Tuna Cup - Weekly Open Tournament ISSL (IntoTheTV x SOOP SC2 League): Premier WORTEX Challenger Series — Open SC2 LAN in Budapes
Strategy
[H] ZvP Mid-Late Game: Stalkers Collossi HT
Custom Maps
Simple Questions/Answers [G] How to playtest arcade maps [A] Nemrods 1/4 players
External Content
Mutation # 549 Endless Sparkles The PondCast: SC2 News & Results Mutation # 548 Shining Bright Mutation # 547 Temple Of Terror
Brood War
General
BW General Discussion [BW] Looking for Clan Thread! [ASL22] Finals Preview: Sweet Victory! Recent recommended BW games [Megathread] Daily Funny Videos
Tourneys
[Megathread] Daily Proleagues [$1250] International ShieldBattery League [BSL23] RO24 Group D - Sunday 21:00 CET [BSL23] RO24 Group B - Saturday 21:00 CET
Strategy
50,000-Word Terran Builds Memo 2026-10-22 Cliff Jump Revisited (1 in a 1000 strategy) Simple Questions, Simple Answers
Other Games
General Games
Stormgate/Frost Giant Megathread Nintendo Switch Thread Mobile Legends: Bang Bang Armies of Exigo - YesYes? General RTS Discussion Thread
Dota 2
Dota 2 Champions League Season 3 Begins April 25!
League of Legends
[TL LoL EUW IHs] Teemo shall perish
Heroes of the Storm
Heroes of the Storm 2.0
Hearthstone
Deck construction bug
TL Mafia
TL Mafia Community Thread
Community
General
Things Aren’t Peaceful in Palestine Canadian Politics Mega-thread European Politico-economics QA Mega-thread US Politics Mega-thread Russo-Ukrainian War Thread
Fan Clubs
Reynor Fan Club The Flash Fan Club Serral Fan Club
Media & Entertainment
Anime Discussion Thread Movie Discussion! [Manga] One Piece
Sports
Football (Soccer) Thread TeamLiquid Health and Fitness Initiative For 2023 MLB/Baseball 2023
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread
TL Community
Recent Gifted Posts
Blogs
Innovate or Game Over?
TrAiDoS
ShieldBattery on Mac
Kraekkling
[ASL22] Ro4 Day1 Ticket Giv…
bITt.mAN
Can Bots Beat Pros?? Starcr…
namkraft
Customize Sidebar...

Website Feedback

Closed Threads



Active: 8775 users

Preventing Observer Desyncs

Forum Index > BW General
Post a Reply
tec27
Profile Blog Joined June 2004
United States3727 Posts
February 08 2022 02:03 GMT
#1
In the latest version of ShieldBattery, we've identified and fixed the bug that has been causing desyncs for observers. Since not every tournament is played through ShieldBattery, I thought I'd explain what the underlying cause is and how you can avoid triggering it in games you are observing.

tl;dr: How you can avoid triggering a desync as an observer
  • Observe games through ShieldBattery. We've fixed the bug so it won't occur in any games there.
  • Don't change the player vision settings once a unit requiring detection is in the game (includes both stealth and burrowed units)


Example of this occurring:

(starts around 44:11 in case the embed doesn't get the time)


What's going on

In StarCraft, detection is not removed immediately when the unit/building providing it goes away. You can see this pretty clearly if you kill a detector, there will be brief period where cloaked units can still be seen. When Blizzard added the observer mode, they mostly reused existing game logic to implement the various features, including switching between different player's vision. At some point they decided that the existing logic around stealth units (that detection would be applied after a delay) was unacceptable for observer mode: they wanted switching to a player's vision to apply the detection status immediately.

So, Blizzard wrote code to call a function to update the sprites for those units immediately, thinking it was safe. *But* that code actually calls through to update the "real" detection status for this unit as well (a value used by the game for simulating actual game logic). If this value differs from the values the actual players have, it risks causing a desync between the players and the observer.

Desyncs are often very subtle, e.g. they may just result in a different amount of random numbers being generated during a particular turn. But these things quickly add up over time: one extra random number during a turn might make a unit miss on one person's game when they hit on everyone else's, which then results in a unit dying when it lived in the "real" game, and then on and on until you get to extremely observable effects: tons of idle workers, units running to their death with no micro, etc.

So in the linked VOD above, the observer changes player visions around 44:27, when a DT is on the field. This triggers this desync, which the broadcast crew + Tastosis do not notice for about 2 minutes (although they are very confused!), which can show you how subtle this is.

On ShieldBattery, we've fixed this by preventing changes to the unit detection status outside of a particular code path, so if you're playing/observing games there, everything will fine. If you're playing games on LAN or Bnet, avoiding changing the player vision once any stealthed units are out should avoid the desync as well.
Can you jam with the console cowboys in cyberspace?
Dakota_Fanning *
Profile Joined January 2008
Hungary2371 Posts
Last Edited: 2022-02-08 11:51:31
February 08 2022 11:51 GMT
#2
Good job tec27, I still don't understand why Blizzard pays its employees instead of you.
https://repmastered.icza.net
Ziggy
Profile Blog Joined June 2013
South Korea2107 Posts
February 08 2022 11:51 GMT
#3
another victory for the private sector
WriterDefeating a sandwich only makes it tastier. @imjustziggy
oxKnu
Profile Joined December 2017
1268 Posts
Last Edited: 2022-02-08 13:07:32
February 08 2022 13:07 GMT
#4
Such a significant game-breaking bug for observing/replays.

At least the players can't be affected by it, which is just the fortunate side of it.
M3t4PhYzX
Profile Joined March 2019
Poland4300 Posts
February 08 2022 17:54 GMT
#5
Man I love this community.
IntoTheWow
Profile Blog Joined May 2004
is awesome32282 Posts
February 08 2022 18:18 GMT
#6
tec27, the one true king
Moderator<:3-/-<
ZZZero.O
Profile Joined July 2011
Poland1631 Posts
February 08 2022 19:06 GMT
#7
So all the desyncs could have been avoided! It was all my fault!
https://www.patreon.com/Bombastic || https://liquipedia.net/starcraft/Bombastic_StarLeague || https://linktr.ee/bombastic
earob84
Profile Joined October 2017
Germany194 Posts
February 08 2022 19:17 GMT
#8
Wow great Job tec!
Maybe you are the first person that found the reason for the obs-desyncing. Or does the korean community know about it?
Cryoc
Profile Joined July 2011
Germany914 Posts
February 08 2022 19:28 GMT
#9
Very nice find! With the workaround of not changing the vision, the future ASL games will be safe as well.
http://www.twitch.tv/cryoc
Grouhh
Profile Joined May 2019
57 Posts
February 09 2022 12:07 GMT
#10
You guys are awesome!
GG WP
oxKnu
Profile Joined December 2017
1268 Posts
February 09 2022 12:15 GMT
#11
Yeah, I imagine that the Korean community also knows about it now.

I know some users here are Koreans and will probably share this on ygosu and whatnot..
y2kid
Profile Joined May 2018
92 Posts
February 09 2022 12:51 GMT
#12
@ZZZero.O I do not think all the desyncs could have been avoided. Correct me if I am wrong, Tec, but he found one of the reasons why this happens. I have noticed that sometimes replays that are saved as LastRep.rep are desynced every time you watch them, but if you find the "auto-saved" replay it renders just fine. So the vision bug is one of the reasons for desync but I do not think all. Of course, we are talking replays vs live games but still it happens for a variety of reasons. Additionally, from watching the BSL casts, I have noticed that desyncs are more likely to occur if the latency between the players is not very good, i.e., when players from two continents play more desyncs occur compared to two opponents located geographically closer.
tec27
Profile Blog Joined June 2004
United States3727 Posts
Last Edited: 2022-02-09 19:49:29
February 09 2022 19:46 GMT
#13
On February 09 2022 03:18 IntoTheWow wrote:
tec27, the one true king

Credit where it's due, neive is the one who found this for us and developed a fix (and also developed our fix for the floating SCV glitch and various other exploits that still work on Bnet). He just doesn't post on TL and I thought this would be helpful for the community in general

On February 09 2022 21:51 y2kid wrote:
@ZZZero.O I do not think all the desyncs could have been avoided. Correct me if I am wrong, Tec, but he found one of the reasons why this happens. I have noticed that sometimes replays that are saved as LastRep.rep are desynced every time you watch them, but if you find the "auto-saved" replay it renders just fine. So the vision bug is one of the reasons for desync but I do not think all. Of course, we are talking replays vs live games but still it happens for a variety of reasons. Additionally, from watching the BSL casts, I have noticed that desyncs are more likely to occur if the latency between the players is not very good, i.e., when players from two continents play more desyncs occur compared to two opponents located geographically closer.

Yeah, replay desyncs are (mostly) a separate issue, and have been around since before SC:R and this change. If the same code is used while watching replays when changing player vision (I'm honestly not sure if it is or not, given that the UIs are implemented differently) this could have caused the same issues there, but there are also other cases where replays desync and I'm not entirely sure what the underlying cause is there.
Can you jam with the console cowboys in cyberspace?
Please log in or register to reply.
Live Events Refresh
The PondCast
19:00
Episode 115
CranKy Ducklings20
LiquipediaDiscussion
[ Submit Event ]
Live Streams
Refresh
StarCraft: Brood War
Shuttle 1279
BeSt 656
Leta 516
Jaedong 280
Hyuk 209
Mini 182
Soma 182
Larva 121
Sexy 118
ZerO 79
[ Show more ]
Sharp 62
NotJumperer 44
Last 29
soO 20
Terrorterran 16
hero 15
Free 13
ajuk12(nOOB) 11
yabsab 10
Noble 9
Sacsri 7
Dota 2
Gorgc9990
Counter-Strike
pashabiceps1155
olofmeister905
edward56
Other Games
summit1g8384
ceh9511
crisheroes218
Livibee199
Sick121
ArmadaUGS47
dupreeh11
ZerO(Twitch)8
Organizations
Other Games
gamesdonequick717
[ Show 13 non-featured ]
StarCraft 2
• LUISG 36
• CranKy Ducklings SOOP5
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• Migwel
StarCraft: Brood War
• iopq 17
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
Dota 2
• lizZardDota2275
League of Legends
• Stunt614
Upcoming Events
Kung Fu Cup
47m
IntoTheTV X SOOP
1d
SHIN vs GuMiho
Clem vs Classic
OSC
1d 11h
WardiTV Invitational
2 days
GSL
2 days
Epic.LAN
2 days
Replay Cast
2 days
Sparkling Tuna Cup
2 days
Epic.LAN
3 days
AI Arena Tournament
3 days
[ Show More ]
Yamato Cup
4 days
Map Test Tournament
4 days
WardiTV Weekly
5 days
Replay Cast
5 days
Rogue vs Classic
Patches Events
6 days
PiGosaur Cup
6 days
Liquipedia Results

Completed

Proleague 2026-10-27
Blizzard Classic Cup 2026
HCC Season 3

Ongoing

Acropolis #5
KCM Race Survival 2026 Season 4
International ShieldBattery League
BSL Season 23
PGL Masters Bucharest 2026
Stake Ranked Episode 5
1win Private Club #2
Thunderpick World Champ. '26
ESL Pro League Season 24
Stake Ranked Episode 4
1win Private Club #1
Logitech G Play Connect 2026
SL StarSeries Fall 2026
FISSURE Playground #3
BLAST Open Fall 2026
Esports World Cup 2026

Upcoming

IPSL Winter 2026-27
SC4ALL II: Brood War
BSL 23: Non-Korean Championship
HSC XXX
Stellar Fest 2: Lunar Cup
SC4ALL II: StarCraft II
Kung Fu Cup 2026 Grand Finals
RSL Offline Finals
eXTREMESLAND 2026
PGL Major Singapore 2026
Stake Ranked Episode 6
BLAST Rivals Fall 2026
IEM Beijing 2026
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.