Inspiration
Ecos Profundos was born from pure nostalgia and a passion for dark fantasy anime series and the classic video games of our childhood. Every pixel, every mechanic, and every corner of the lore aims to bring back that sense of wonder we felt when discovering fantastical worlds on retro screens, now reimagined with modern technology.
What it does
Ecos Profundos is a dark fantasy action RPG where every battle is about more than simply attacking.
Fight your way through increasingly dangerous waves of enemies, manage your stamina, choose when to attack or retreat, and use positioning and your enemies' weaknesses to turn the odds in your favor. No two hits are exactly the same: damage can change depending on the situation, rewarding players who observe, adapt, and learn how the world reacts to their actions.
Defeating enemies allows your character to grow stronger and face increasingly demanding stages. Progression is meant to be felt: challenges that once seemed dangerous should gradually become easier as your character evolves.
Each stage pushes the player further, introducing tougher enemies and more demanding encounters before opening the path to the next challenge.
In the future, Ecos Profundos will also explore a more narrative and introspective side. A mysterious voice will accompany the player through fragments of text, reflections, and questions about doubt, destiny, failure, hope, and the paths we choose.
Sometimes, progressing will mean defeating another wave of enemies.
Sometimes, it may simply mean understanding what the journey is trying to tell you.
How we built it
The project was developed entirely natively using Apple’s ecosystem. It is powered by Swift 6, using SpriteKit for high-performance rendering and GameplayKit to structure the game logic through state machines and entities.
Character behavior is organized around gameplay states, keeping movement and animation transitions separate from the rendering logic. A custom virtual joystick provides normalized movement vectors that are translated into character velocity, movement states, and sprite orientation.
Sprite animations are organized into texture atlases for the different movement states and directions, allowing the game to switch animations efficiently while avoiding unnecessary texture loading.
Due to the time constraints imposed by the deadline, the pixel art assets were purchased from the itch.io platform and created by artist jfranciPX, under a license that allows their use in commercial projects. They were integrated into the project together with the custom touch controls and gameplay architecture.
Challenges we ran into
One of the main challenges was preventing animation re-entry. Since the game loop updates continuously, repeatedly requesting the same state caused animations to restart from the first frame. I had to ensure that state transitions only occurred when the character's actual movement state changed.
Another challenge was tuning the virtual joystick thresholds. The joystick produces continuous vector values, so I needed to define clear boundaries between Idle, Walk, and Run without causing unstable transitions when the input magnitude was close to a threshold.
Managing directional sprites was also an important challenge. The character uses different animations for Front, Back, and Side, while horizontal mirroring is applied dynamically for left-facing movement. Keeping this logic clean and synchronized with the current movement state required careful separation of responsibilities.
Accomplishments that we're proud of
I'm especially proud of building the gameplay foundation entirely with native Apple technologies, without relying on an external game engine.
The combination of SpriteKit, GameplayKit, and Swift 6 has allowed me to create a clean architecture where character movement, animation, state transitions, combat, progression, and future gameplay systems can evolve independently without having to constantly redesign the core of the game.
I'm also proud of achieving smooth transitions between idle, walking, and running animations while keeping directional movement responsive to the virtual joystick. Although these may seem like small details from the player's perspective, getting them to feel natural required solving several problems related to animation states, movement vectors, and the real-time game loop.
Another accomplishment I'm particularly proud of is integrating RevenueCat and defining a monetization model that respects the player experience.
For the Shipathon version, the game includes three optional "Buy Me a Coffee" support options. I have also prepared the idea of unlocking the complete game through a single purchase, although that option remains disabled in the current version.
Rather than building the game around aggressive monetization or randomized purchases, I want players to understand exactly what they are paying for. In the future, I may introduce optional equipment, items, or progression-related purchases, but always with the goal of supporting the adventure rather than replacing progression, skill, or exploration.
What we learned
During development, I gained a deeper understanding of real-time state management and how seemingly small architectural decisions can directly affect how a game feels when played.
I learned how to coordinate continuous joystick input with discrete gameplay states, how to structure and reuse directional sprite animations efficiently, and how to prevent unnecessary state transitions from restarting animations inside a real-time game loop.
The project also helped me better understand how GameplayKit state machines can work alongside SpriteKit, and how both frameworks can be combined to keep gameplay logic modular and maintainable.
Beyond the technical side, I also learned that designing a game means making decisions about the player experience long before every mechanic exists. Progression, difficulty, rewards, monetization, and combat are interconnected systems, and changing one of them can affect how the rest of the game feels.
Working on the monetization model made this especially clear to me. I had to think not only about how purchases could be implemented, but also about where I personally want to draw the line between monetization and preserving a fair and enjoyable progression system.
What's next for EcosProfundos
After Shipathon 2026, I plan to gradually expand Ecos Profundos into a much deeper action RPG.
The current prototype already includes movement, basic attacks, damage, a first contextual advantage when attacking from behind, health and stamina recovery items, wave-based progression, and the initial monetization structure. The full-game purchase option is planned but remains disabled in the Shipathon version.
Future updates will introduce more weapons, equipment, consumable items, character progression systems, enemy types, combat mechanics, and contextual advantages based on positioning and enemy states.
I also want to keep expanding the number and variety of stages, with the long-term goal of reaching around 100 phases while progressively increasing difficulty and encounter complexity.
The monetization model will continue to focus on transparency. Players will be able to experience the first stages for free and later unlock the complete game through a single purchase. Optional equipment and progression-related purchases may also be introduced, but I want to avoid casino-like systems or randomized purchases designed to pressure players into spending.
Beyond combat and progression, the game will continue to grow through new mechanics, narrative elements, environmental storytelling, and the mysterious voice that accompanies the player throughout the journey.
My goal is not simply to add more content, but to keep expanding a world where becoming stronger also means learning how to fight smarter, understanding its rules, and discovering what lies deeper within Ecos Profundos.
Built With
- aseprite
- gameplaykit
- sprite-kit
- swift
- swift6
- swiftui
- xcode
Log in or sign up for Devpost to join the conversation.