Hi
WoW has a language system. Characters can send messages in different in-game languages, such as Orcish or Zandali. If another character understands that language, they will see original message; otherwise they will see scrambled text.
The text is scrambled deterministically, i. e. it always produces the same output with same inputs. As orc, you can write "lol" 100 times and each time allies will see "kek". So there is an addon that kinda lets you talk to members of opposite faction. Project page
This addon splits your message into letters and sends them one-by-one. However, I was unable to find a way to post some of the letters. For Common, missing letters are C, J, P, Q, X, Z. Orcish misses exactly half of alphabet: B, C, E, F, J, P, Q, S, X, V, W, Y. Currently, my policy is to replace them with closest-sounding analogs.
Language Writeable letters Missing letters Common A, B, D, E, F, G, H, I, K, L, M, N, O, R, S, T, U, V, W, Y C, J, P, Q, X, Z Orcish A, D, G, H, I, K, L, M, N, O, R, T, U, X, Z B, C, E, F, J, P, Q, S, X, V, W, Y
First I thought that scrambler used a simple seeded random function to match input words to an array of permitted words. I still think it happens to words longer than 1 symbol. But there are a couple of weird things going on with 1-symbol words.
- Scrambler is aware of capitalization, but only for letters in ASCII-range. K turns into "O", k turns into "o". But Ü ü are considered separate symbols that produce different capitalized letters.
- Some unicode ranges never produce certain letters. For example, no letter matches "T" in 0000-0800 for Orcish, but they become common after letter 0800 (ࠀ). Letter "U" starts appearing after D800, in range for various Chinese letters.
- Chat matches even invalid non-characters such as this one to predetermined letters.
It's strange and I don't know why chat scrambler behaves exactly this way. Is it possible to find out what exactly happens when game encrypts cross-language speech? Maybe there have been a code leak related to chat; or maybe somebody reverse-engineered game client from 2009 (it have been encoding chat messages on client side before 2010).