Does anyone with experience in game engines or cross-platform development know the concrete technical reasons Age of Empires II might not support crossplay between macOS and Windows? I'm looking for more than speculation. For example, if floating-point behavior, pathfinding, processor architecture, or platform-specific code can cause multiplayer desynchronization, a small C++ example would be helpful. I'm especially interested in whether Apple Silicon and x86 can produce different simulation results that cannot reasonably be corrected with compiler settings or deterministic math libraries. Could the main obstacle simply be the cost of keeping two codebases synchronized, rather than an unavoidable technical limitation?
3 Answers
Separate codebases are not inherently a barrier to crossplay. Different platform implementations can still communicate as long as they use the same network protocol and produce compatible simulation results. The real question is whether supporting another platform provides enough benefit to justify testing, synchronization, bug fixing, certification, and long-term maintenance. Performance differences can also affect the experience—for instance, if one platform consistently runs at a much lower frame rate—but that is a product and balancing concern rather than a fundamental networking restriction.
The fact that matchmaking queues appear reasonably active on macOS does not explain the missing crossplay by itself. A healthy platform-specific player pool can make separate matchmaking workable, while crossplay would still require the developers to support and maintain shared networking and simulation behavior across both platforms.
The commonly suggested technical issue is deterministic lockstep simulation. In that model, every client receives the same inputs and independently calculates the entire game state, so even a tiny difference in floating-point rounding can eventually cause a desynchronization. Apple Silicon and x86 may handle edge cases such as denormalized values, rounding, and fused operations differently, and compilers can also make different optimization choices. However, this is not automatically an impossible problem: developers can use fixed-point arithmetic, carefully controlled floating-point settings, deterministic math routines, or periodic state synchronization. Those approaches may require substantial changes to the simulation code and could have performance or maintenance costs, but the hardware difference alone does not prove that crossplay cannot be implemented.

Could you show a minimal C++ example where the same calculation produces different results on Apple Silicon and x86, and explain whether compiler options or a deterministic math implementation would fix it? I’m trying to understand how large the practical cost would be.