DOOM For ATAK.

The Android Team Awareness Kit (ATAK) is a powerful geospatial mapping application widely used in tactical and operational scenarios. While its core functionality revolves around shared situational awareness, the platform’s extensibility offers the potential for creative integrations, perfecting the functionality for each individual operator’s needs.

As a Company that produces plugins for ATAK, we often wonder what will the next big plugin? For us we felt that there was a current lack of mid 90’s FPS games, filling the gap of what to do whilst you wait for that logistics drop or whilst J6 are topping off the radio config.

On a serious note, this was a perfect opportunity to demonstrate that yes, we produce plugins, however we strive for more complex endeavours than just publishing CoT from yet another sensor. Refactoring the classic game Doom into an ATAK plugin demonstrates both our technical expertise and the platform's versatility. Admittedly this started as a bit of an internal Xi Systems joke as an old reference to ‘Will it run Doom?’ along with the typical ‘How hard can it be?’.  Fortunately, id Software released the source code under the GPL-2.0 license which allowed us to start this endeavour legitimately.

This project combined nostalgia with cutting-edge mobile capabilities, providing a proof of concept for complex integrations that go far beyond standard COT messaging.

Our approach to bringing Doom to ATAK revolved around the Java Native Interface (JNI), a tool we relied on to serve as the gateway to hell ... er, I mean, the gateway for porting the game into a plugin environment! Using JNI was a critical choice; it acted as a bridge between the Java-based ATAK framework and the native C codebase of Doom. This method ensured optimal performance while preserving the original game’s soul— – though, much like battling cacodemons, it wasn’t without its challenges. After all, some of the existing Java ports were not exactly the BFG9000 of solutions, making them poor candidates for direct adaptation.

While JNI provided a solid foundation, integrating Doom into ATAK required overcoming the tricky interactions between ATAK’s context, the plugin framework, and the game engine itself. From scratch, we had to reimplement integrate the rendering, SFX, music, and control systems  and sound systems to make the game come to life. It was a bit like navigating a labyrinth of lost souls, but we knew finding our way out would be worth the effort.

Integration, Integration, Integration

Getting the C code to run within the JNI layer inside the ATAK plugin was, relatively speaking, the straightforward part. However, much like finding yourself in a room full of ammo with no enemies, a game engine without controls, display, or sound felt pointless – though—though those few glorious lines of debug output confirming we had a functional engine running were like spotting the first health pack after a tough fight. Victory was in sight, but there was still plenty of hell to raise before Doom would fully come to life in ATAK.

To address these challenges, we developed a custom OpenGL interface to bridge the gap between the underlying C code and the rendering requirements of ATAK. This interface extracted the frame buffer content generated by the native Doom engine and seamlessly rendered itthe composite image onto a rectangular surface within an OpenGL viewport. This approach ensured that the game’s visuals were not only faithfully reproduced but also properly integrated into the ATAK environment, maintaining smooth performance and compatibility. Initial attempts looked like an old analogue TV with little reception, however through persistence we managed to get the good old 90’s graphic experience from within the plugin display. Fortunately, this approach also allowed us to manipulate the plugin for dynamic switching between fully immersive Doom experience and checking the location of that logistics drop.

When it came to audio, the sound effects were thankfully simple to integrate. We grabbed the sound buffer, wrote it to an Android audio track and it worked first try. This contrasted with the complications with getting the music working. Without the luxury of megabytes of storage for music files, Doom’s music uses MIDI to say how the music should sound. We developed a custom MIDI players, initially subjecting the office to a cacophony of pure sine waves instead of electric guitars. After resting our aching ears, we used something that could play a SoundFont like those used in Sound Blaster sound cards of the time, letting us faithfully reproduce the 8-bit metal soundtrack, we finally we achieved synchronisation between the music and sound effects. The result? Audio that not only fit seamlessly but also played at a pace perfectly aligned with the gameplay.

To infuse this experience with a touch of Xi Systems magic, we experimented with various user experience enhancements. Ultimately, we settled on integrating the phone's gyroscope to deliver a more accurate (if potentially dizzying) method of aiming. Traditional Doom gameplay relies on keyboard and mouse input – back in the '90s, you couldn’t exactly swivel your monitor to move your character – but with this plugin, you can physically tilt your phone left and right to turn your player character, while the on-screen joystick and buttons handle moving, interacting, firing weapons, and changing weapons. We did consider making the player movement based on your real-life movements instead of a virtual joystick, but most players weren’t likely to have Doom-level-sized spaces to run around in.

Beyond Basic COT Integrations

While CoT integrations are the cornerstone of ATAK plugins, this project highlights our ability to tackle highly complex and unconventional solutions within the platform. Porting Doom and adapting it to the mobile context was both a technical and enjoyable challenge that required a deep understanding of Android development, native programming, and sensor integration. This project not only showcased our technical capabilities but also demonstrated that we can push the boundaries of ATAK plugins in ways that go beyond simply writing a LinkedIn or blog post about our achievements.

More importantly, this project illustrates our creative approach to exploring ATAK’s potential. By embedding an entire game engine within a plugin, we proved that ATAK can support dynamic, immersive experiences—not just static map overlays or basic messaging. The techniques and methodologies we developed here have broader implications, such as the integration of advanced simulation tools or interactive training environments. The research and design patterns we’re exploring will also allow us to integrate high-performance native C code into ATAK plugins, which will be critical for applications like Electronic Signals Intelligence and track correlation.

If you’re working on an ATAK integration project, don’t hesitate to reach out. If you’re curious about experiencing Doom on your ATAK installation, head over to our GitHub repo to download the release compatible with ATAK. These releases are signed and fully compatible with the formal ATAK release from tak.gov or the Play Store. For more information, check out our previous blog post, where we explain that, thanks to the Third-Party Pipeline, this plugin can run on all flavours of ATAK.

Get the source code here, released as GPL 2.0 as per the original DOOM or here to download the pre-signed APK’s for your ATAK Installation.

What’s next? Perhaps next year we'll bring back Doom multiplayer or maybe try something like Quake. Command and Conquer could also work well with ATAK's map functionality... who knows what’s next!

Next
Next

ATAK Versions, Plugins and Development Rules