Protocol Fundamentals
The FunOrb protocol is a TCP-based, stream-oriented protocol with variable sized packets. The original game servers ran under the 43594 port, falling back to port 443 if certain communication errors occur. These ports are not strictly required and each game can be configured to use different ports via Applet parameters.
Packet Framing
The protocol uses a very simple packet framing scheme, a packet typeId followed by it's size and then the payload.

Optionally, some packets may contain a crc32 checksum of the payload:

Packet Sizes
Packets can have four different sizes:
- Fixed size packets, which are packets whose payload is a fixed size.
- Var-Byte packets, which are packets whose payload size is a value between
0and255. - Var-Short packets, which are packets whose payload size is a value between
0and65535. - Var-Size packets, which are
Var-Byteor aVar-Shortpackets depending on it's payload size.
Packet Type Obfuscation
The Game Protocol employs a packet typeId obfuscation by using an Isaac pseudo-random generator
and adding (on the encoder side)/subtracting (on the decoder side) the next generated random int to the typeId as the following pseudo-code:
Encoder
int typeId = (byte) (realTypeId + isaac.nextInt())
Decoder
int typeId = obfuscatedTypeId - isaac.nextInt() & 0xFF