Inspiration
We’ve always loved the mystery and challenge of classic adventure games like The Legend of Zelda and Enter the Dungeon.
Our goal with The Legend of Aetheria was to reimagine that retro experience — but built entirely from scratch in pure Java, using procedural dungeon generation, simple but dynamic combat, and endless replayability.
What it does
The Legend of Aetheria is a procedural dungeon-crawling game where every door leads to a new challenge.
Each dungeon is randomly generated with 1–3 doors, unique obstacles, and enemy spawns.
Players can explore, fight, and collect items like bows, arrows, and keys — all while surviving against waves of monsters.
Core Features:
- Procedurally generated dungeons with unique layouts each run
- Real-time combat using sword (mouse click) and bow (limited arrows)
- Multiple enemy behaviours: melee chasers, ranged attackers, and a final boss after seven rooms
- Key and bow item drops for progression and variety
- Game-over and restart system for infinite replay
How we built it
We built the game entirely in Java, without using any prebuilt engines or frameworks.
All systems — movement, collision, combat, map generation, and AI — were programmed manually.
The entire game loop runs on timed updates, rendering objects and entities directly onto a simple graphical canvas.
We focused on designing clean, modular code: each room is generated procedurally, enemies react to the player’s movement, and every interaction (combat, pickups, door transitions) is handled through game logic rather than external libraries.
Tech Stack:
- Language: Java
- Rendering: Basic Java 2D graphics
- Procedural Generation: Custom random dungeon generator (1–3 doors per room)
- AI Logic: Distance tracking and chase/attack patterns for monsters
- Development Environment: IntelliJ IDEA on macOS
Challenges we ran into
- Implementing real-time movement and collision in Java without an engine
- Balancing enemy behaviour so the game feels fair but still challenging
- Making procedural generation seamless when moving between rooms
- Keeping performance smooth while updating multiple entities and projectiles simultaneously
- Working with limited graphics while keeping gameplay visually clear
Accomplishments that we're proud of
- Built a fully playable, real-time dungeon crawler from scratch in pure Java
- Created procedural room generation that guarantees new layouts every run
- Designed functional combat mechanics (sword, bow, fireballs, melee enemies)
- Implemented a working boss encounter after multiple door transitions
- Developed a clean architecture that makes future expansion easy (e.g., textures, sound, menus)
What we learned
- How to build a functional game loop and collision system from scratch
- The importance of balancing AI speed and cooldowns for good game feel
- How procedural generation changes replay value and pacing
- How to manage code complexity and logic flow in Java without game frameworks
What's next for The Legend of Aetheria
- Add unique sprites and animations for each monster type
- Integrate sound effects and background music
- Expand the boss fight into a turn-based “battle mode” system
- Introduce save/load functionality and multi-floor dungeons
- Release the game publicly as a downloadable
.jaror web applet
Our vision:
To turn The Legend of Aetheria into a fully realised, open source Java adventure game that blends nostalgic design with modern procedural systems.
Log in or sign up for Devpost to join the conversation.