Inspiration
Classic FPS games delivered adrenaline—but not intelligence. In legendary shooters like DOOM (1993), Quake, and Wolfenstein, enemies were fast, furious… but dumb. They followed fixed paths, repeated predictable patterns, and ultimately became routine. For seasoned players, the challenge faded. Once you cracked the AI’s behavior — the fear was gone. Hence, we thought of fixing that.
What it does
Infernal_Abyss.exe is a retro-inspired first-person shooter where enemies aren't just demonic — they're adaptive. Built as a homage to DOOM (1993), this project reimagines the classic shooter with a modern twist: Enemies evolve using reinforcement learning, adapting to your strategies and punishing repetition. As you fight your way through waves of enemies, they:
- Observe your behavior (e.g., movement patterns, weapon usage)
- Adjust their own strategy with each encounter
- Become faster, smarter, and harder to predict The result? A gameplay loop that fights back. It’s not just about shooting faster — it’s about outsmarting what’s learning from you.
How we built it
The core game runs on Godot, which we chose because of its simplicity, open-source nature, and ability to export to web (even if the export wasn’t fully ready in time). For the adaptive enemy behavior, we used a small Python Q-learning script, where we defined a basic environment, trained the model to "choose actions" based on player patterns, and then exported the evolving behavior to plug back into the game. The enemy doesn’t truly “think” in real-time yet — the AI is simulated using predefined logic derived from the Q-table evolution — but the foundation is laid. We stuck to Git from the start. Every major change is committed. We didn’t want to just build something and dump it — the repo tells the whole story, from the first asset import to the final AI tweak.
Challenges we ran into
There were many, but the biggest was time. Building even a simple FPS is no joke, and training an AI at the same time made things even tougher. We had to constantly trim down ideas and re-scope features while keeping the core experience intact. Trying to make the enemies feel alive without making the game unplayable was another balancing act. Some early versions had enemies that were too aggressive or just broke entirely. Integrating AI into Godot without live communication also forced me to improvise a lot more than we expected.
Accomplishments that we're proud of
We finished. That's the biggest win. The prototype works. The idea is clear. We stuck to the theme, built the whole thing from scratch, kept the repo clean, and somehow didn’t abandon the project halfway through. Even though it's a rough prototype, it feels like it has potential. That’s the part we are really proud of — it made us excited to keep working on it even after the hackathon ends.
What we learned
This was my first time combining reinforcement learning with game development, and it forced me to stop thinking in isolated silos. We had to treat AI not just as code that runs, but as a design challenge — how do we make the player feel like the enemy is learning? Also, we realized how important it is to build something playable fast. If you spend too long chasing a perfect system, you’ll end up with nothing. But if you build something messy, something that barely runs but shows the idea, that’s a win in itself.
What's next for Infernal_Abyss.exe
This version is just the start. Given more time, we like to build a proper two-way communication between the model and the live game loop. The goal is to make something that feels cursed — not in a horror sense, but cursed like an old .exe that you shouldn’t have opened. The kind of game that glitches out in strange ways, but those glitches are… learning. Eventually, we want this to live on Itch.io as a proper AI-infused retro shooter. But for now, it’s alive.
Log in or sign up for Devpost to join the conversation.