Towaga: Among Shadows
Professional projects | | Links: Watch the intro cinematic

Overview
Type : Professional
Technology : Unity
Platforms : iOS, tvOS, MacOS, Steam, Humble, Nintendo Switch, PS4, Xbox, Android
Introduction
Towaga: Among Shadows is an action-packed experience integrating twin-stick shooter mechanics, diverse gameplay modes, local multiplayer functionality, and an extensive array of character upgrades and unlockable features.
Players takes on role of Chimu, a warrior entrusted with mastering the power of light to banish swarms of enraged creatures summoned by the antagonist, Metnal, who are determined to dismantle you. Across more than 70 levels and various game modes of considerable challenge, confront these adversaries using your beam of light. To aid in this endeavor, unlocking new spells, abilities, and enhancements becomes curcial. All of this unfolds within an enigmatic storyline accompanied by captivating 2D graphics, cinematics, and a distinctive art style.
Initially launched as part of the Apple Arcade debut in September 2019 on iOS, tvOS, and macOS, the game subsequently became available on gaming consoles (Nintendo Switch, PS4, Xbox One) and Steam in 2020. Finally, it made its way to the Android platform in 2023.
Gameplay
The game is a 2d twin stick shooter, where your objective is to survive successive waves of enemies. Unlike typical games in this genre that utilize projectile weapons, here you utilize a beam of light to inflict damage upon adversaries. Additionally, you have access to a power that requires a mana point, which regenerates slowly. Consequently, you have limited weapons at your disposal to overcome enemy waves, demanding strategic prioritization of incoming threats to prevent becoming overwhelmed.
Three distinct types of levels—stationary on the ground, stationary atop a pyramid, or mobile in the sky—introduce gameplay variety across different game modes.
The game offers five diverse modes:
Story: Guides players through the main storyline by embodying the character Chimù, progressing through increasingly difficult levels.
Survival: Challenges players to withstand successive waves of escalating enemies, testing endurance against relentless assaults.
Flying: A variant of Survival mode set in the air, presenting a fresh gameplay experience with enemies appearing in an aerial environment.
Void Realm: An expansion of the story mode renowned for its high difficulty level, catering to experienced players seeking a more demanding gaming experience.
Moreover, the game includes a multiplayer mode:
- Light Clash: Engages up to four players locally in head-to-head competition, providing a competitive gaming experience among friends or family on a single screen.
Beyond its rapid-paced gameplay, the game boasts numerous unlockables that enrich the universe’s lore, along with a vast array of trials awaiting completion.e.
Developement
I became involved in the Towaga development towards the end of production, having previously worked on the Sketchman game during Towaga’s initial production stages. My primary contributions involved debugging and optimizing the game for its release on the Apple Arcade, considering the diverse range of devices it would run on. Notably, there’s a substantial gap in capabilities between the most powerful iPhone, an iPod Touch, and an Apple TV.
Following the game’s release, I actively participated in the post-production phase, handling updates, and ensuring the game’s adaptation to various other devices and consoles. It was during this phase that I transitioned into the role of lead developer for the project.
Apple Arcade
For the Apple Arcade release, my role encompassed debugging, quality assurance (QA), and optimization.
In terms of optimization, I employed various tools to meet specific frame rate targets.
Initially, my focus was on simplifying scenes, particularly backgrounds comprising numerous 2D sprites and particles. Some scenes contained an excessive number of triangles, surpassing 100,000, which posed challenges for mobile devices. My objective was to significantly reduce this count to less than 5,000 triangles per scene where feasible. Achieving this involved modifying particle systems and regenerating sprite meshes to decrease the polygon count. It required a delicate balance between polygon counts and sprite overlap. Additionally, I used the frame debugger to scrutinize draw calls and enhanced material batching.
Another significant optimization concern revolved around memory management. Initially, the game failed to launch on devices with limited memory due to its many highly detailed, high-resolution sprites consuming substantial space. To address this, I utilized Unity’s memory profiling to test and compare different solutions, along with Xcode profiling to gauge device memory usage. Consolidating all sprites into atlases reduced memory usage significantly, allowing proper grouping and compression of multiple sprites. I had to carefully select compression algorithms to minimize image sizes while maintaining visual quality, especially for non-power-of-two dimensions that could disrupt compression efficiency.
Subsequent optimization efforts involved CPU-bound challenges identified through Unity’s profiler. Tracking memory allocations and recurring code segments became critical. Avoiding memory allocations during gameplay, especially within update loops, was crucial to prevent slowdowns caused by triggering the garbage collector. Mitigating hidden memory allocations within Unity methods or function calls was imperative, alongside reducing the frequency of certain operations, such as excessive save operations.
This extensive optimization work ensured the game’s playability even on the least powerful devices.
Multiplayer
For the third content update on the Apple Arcade game, we opted to introduce a local multiplayer mode inspired by TowerFall. In this mode, players engage in competitive matches within a confined arena featuring blocks and power-ups. Rounds conclude when only one player remains alive, and victory in the match is achieved by winning five rounds. Each participant controls colorful Chimù characters capable of shooting beams of light and dashing at opponents, each with their distinct ray. When two rays collide, it triggers an explosion.
To deter overly defensive play, shooting with the ray consumes mana, which doesn’t replenish automatically. Players must locate scattered mana power-ups within the arena to fire again.
The arenas are constructed with indestructible purple blocks and destructible yellow blocks organized in a grid pattern. These arenas are crafted from PNG files where each pixel corresponds to a grid square. Colors dictate block types (purple or golden) and determine player and mana spawn points.
This local multiplayer mode functions with multiple wireless controllers for friends to join in. Although contemplating an online multiplayer version, integrating it into the current project architecture would have entailed significant development efforts.
Nintendo Switch
Our publisher, Forever Entertainment, was responsible for porting the game to Nintendo Switch, PS4, and Xbox One. However, various technical complications emerged during this process.
We had acquired a development SDK specifically for the Switch in anticipation of the game’s release on that platform. Subsequently, I was assigned the responsibility of aiding in the game’s porting to the Switch.
My responsibilities included porting the latest game updates and incorporating the local multiplayer mode for the Switch. The central focus was on managing the Switch controllers. This involved adjusting the vibration functionality for Joy-Con controllers and managing the diverse controller modes. In the standard game mode, both Joy-Cons were utilized, whereas in the multiplayer mode, users needed the option to select their preferred controller configuration.
Additionally, I integrated leaderboards for the endless game mode, establishing connections to Nintendo’s servers to retrieve scores and rankings.
Furthermore, optimizations were necessary, requiring adaptations to specific content like cutscene videos that needed a specialized format.
Steam
I single-handedly developed the Steam version of the game. To publish a game on Steam, integration of the Steam SDK is essential. This SDK ensures DRM verification during the game’s launch and grants access to the Steam API, allowing functionalities like achievements, leaderboards, and friend invitations.
I employed Facepunch’s implementation of the Steamworks SDK, considered one of the best C# implementations for Unity due to its simplicity, comprehensiveness, and no-cost nature. This API facilitated the incorporation of achievements, leaderboards, and the activation of Steam Cloud saving.
Additionally, adjustments were made to the options screen to include selections for resolution, window mode, and various graphical settings.
A crucial final step involved ensuring native support for a wide array of different controllers. Our input management plugin didn’t seamlessly integrate with the Steam Controller API, necessitating thorough configurations to ensure functionality without it.
Android
The porting process for android was relatively straightforward as the functioning was similar to iOS, with the main differences concerning achievements and leaderboards.
However, the challenge arose during the build submission to the Play Store. The Play Store restricts the size of APK Expansion Files (APKs larger than 150 MB) that can be uploaded. To comply with this limitation, the application needed to be divided using asset bundles, reducing the APK size at download. Additional content is then installed upon the application’s launch. The issue was that the game was not initially designed with asset bundles in mind, and the project’s architecture and scene setups were not ideal for dividing the application. Nevertheless, I managed to make the asset delivery system work for the game. During the initial launch of the application, the loading time is extended as the asset bundles containing all the background and game scenes are installed.