Anno: Build an Empire
Building upon the foundation of the Adobe Flash-based Anno Online for desktop browsers, Mi’pu’mi Games developed Anno: Build an Empire for iOS and Android.
After the initial release, we supported the live service with new features, content and narrative quests for more than 12 months.
Our Contribution
Targeted at iPad2-era devices, the presentation and interaction layer needed to be separated and re-implemented from the ground up. We utilized the Unity engine for platform abstraction as well as UI/UX rendering and logic. For rendering the actual gameplay, however, we completely sidestepped the engine using an undocumented OpenGL immediate mode rendering API that we found inside Unity.
Moving Target
At the project start, the team at Ubisoft had lots of features and additional content scheduled for Anno Online. Performing a one-off snapshot port would not suffice. We developed and maintained an ANTLR-based ActionScript to C# cross-compiler that enabled us to quickly incorporate numerous upstream code-updates both during development and life service.
UI/UX
Anno Online was geared towards mouse-based interaction on desktop browsers - with comparably low resolutions and lots of screen real estate. Rather than building on top of that, we tailored a timeless, touch-friendly user experience including all new menus, fly-outs, ribbons and an ultra-responsive building widget. We incorporated multi-touch zooming and scrolling, inertia and rubber banding. Furthermore, the user-facing statistics and production-chain analysis tools were re-designed to provide clean and simple information for a new audience. To top it all off, we re-made all icons as meshes, allowing us to use low-resolution textures and still have razor-sharp edges without sampling artifacts on Retina devices.
Render Performance
Unlike Anno Online, the game could not rely on fast desktop processors or lots of memory to render more than 10'000 animated sprites at any time. Instead, we rendered non-animated sprites into textures and maintained a tile-based cache with a budget (configurable per device profile) for the number of tiles to render each frame so we would never exceed a frame’s 30ms time budget. Animated sprites were rendered on top of the cached backgrounds, using a custom depth mask shader to achieve animated sprites that could be partially occluded by static ones, despite being rendered on top.
Content Distribution
Back in 2014, app package sizes were severely limited, necessitating the development of an on-demand content distribution solution. Clever use of Unity’s then experimental asset bundle feature allowed us to use the same infrastructure for initial download as well as patch-free seasonal updates of the game content. We presented our solution at Unity’s Unite conference in 2015.
Timed events and narrative quests
Relying on the mechanism described above, our content creators shipped a patch-free Winter event with buildings covered in snow and seasonal items and quests. We also released a Valentine’s event with new buildings and narrative threads woven into the timed quests.