A 2D top-down shooter game written in Java. Fight off waves of enemies, level up, and choose upgrades to survive as long as you can.
This project is currently under development. Here is a list of current and planned features:
- Gun Classes: Choose between different gun classes like Shotgun, Sniper, and SMG, each with unique stats.
- Enemy Variety: Face off against different types of enemies: Small, Normal, Big, and Bosses.
- XP & Leveling: Gain experience from defeating enemies, level up, and become more powerful.
- Upgrades: When you level up, you can choose from a selection of upgrades to enhance your abilities.
- Main Menu: A fully functional main menu with class selection.
- In-Game HUD: A dynamic HUD that displays health and ammo around the player.
- Pause & Game Over: Pause the game at any time, and see your stats when the game is over.
- Particle Effects: Visual effects for gunshots and enemy deaths.
- Screen Shake: Feel the impact of your shots with a screen shake effect.
- Glow Effects: Glowing effects for all game entities.
- Java Development Kit (JDK) installed.
Use make run to compile and launch the game:
make runUse make build to produce a runnable JAR, an app image, and the native installer for the current host OS:
make buildGenerated artifacts are written to dist/:
- macOS:
.appapp image and.dmg - Windows: app image and
.exe - Linux: app image and
.debor.rpmwhen the required packaging tool is installed
Native installers must be built on their target OS. For example, .dmg packaging must run on macOS and .exe packaging must run on Windows.
The Makefile respects JAVA_HOME, so shell helpers such as setjava can point the build at a specific JDK before running make.
You can also build specific package types directly:
make jar
make app-image
make package PACKAGE_TYPE=dmg
make build-mac
make build-windows
make build-linuxGitHub Actions builds Linux (.deb), Windows (.exe), and macOS (.dmg) installers and uploads them in two cases:
- Published GitHub Release — When you publish a release, installers are attached to that release’s tag. Use a tag like
v1.2.3; the package version strips the leadingvforjpackage. - Pushes to the
releasebranch — Each push refreshes the rolling pre-release taggedrolling-release: the workflow moves that tag to the latest commit, clears previous assets on that pre-release, and uploads new installers (version1.0.<run number>). Download them from the repository’s Releases page.
Unsigned macOS builds may require Right-click → Open the first time you run the app.
- Movement:
W,A,S,D - Dash:
Shift - Shoot:
Spacebar - Reload:
R - Pause:
EscapeorP - Menus: Use the
Mouseto navigate and click on buttons in the menu, game over, and upgrade screens.
Contributions are welcome! If you would like to contribute, please fork the repository and submit a pull request.