What are the actual technical or development reasons the Mac and Windows versions of Age of Empires II cannot play together? I'm looking for evidence-based explanations rather than guesses. In particular, does the game's deterministic simulation depend on platform-specific floating-point behavior, processor architecture, or pathfinding calculations? If so, could someone provide a small C++ example showing how the same calculation might produce different results on macOS and Windows or on ARM and x86, and explain whether compiler settings could solve it? My current understanding is that there may be no fundamental impossibility, but maintaining synchronized codebases, testing both platforms, and ensuring identical simulation behavior may not be worth the development cost.
2 Answers
A likely technical concern is deterministic lockstep simulation. In that model, every player’s machine processes the same inputs locally, so even a tiny difference in floating-point rounding, handling of special values, compiler optimizations, or pathfinding can eventually make the simulations diverge. ARM and x86 can differ in some of those details. That doesn’t necessarily make crossplay impossible, though: developers can standardize floating-point behavior, avoid unsafe operations, use fixed-point arithmetic, or synchronize additional game state. Doing that across an established codebase could require extensive testing and changes, with possible performance and compatibility costs. Without documentation from the developers, it’s difficult to say whether this is the specific blocker for this game.
Separate platform codebases are not inherently a barrier to cross-platform multiplayer. Many games use different graphics, input, and operating-system layers while sharing a common simulation or network protocol. The practical issues are maintaining equivalent game logic, reproducing bugs, validating every update on both platforms, and deciding whether the expected player population justifies that work. Performance differences can also affect the experience, but they are usually a design and balancing concern rather than proof that crossplay is technically impossible.

Could you show a minimal C++ example where the same calculation produces different results on ARM and x86? I’m especially interested in whether compiler options can eliminate the difference or whether doing so would have a significant performance cost.