Original arcade shooter game inspired by classic space shooters like Galaga. Built with Java 21 and FXGL game engine.
- JDK 21 or higher
- Maven 3.8+
mvn javafx:runThe game automatically disables Metal rendering on macOS for compatibility. If you still experience rendering issues, you can try:
mvn javafx:run -Djavafx.options="-Dprism.order=sw"Or alternatively:
mvn compile exec:javaVersion comes from pom.xml (1.0.0). Packages are named DeltaBlade-1.0.0-<os>-<arch>.
Local build for the current OS (needs JDK 21 with jpackage):
mvn -Pdist verifyOutput: target/dist/
- macOS:
.dmg(unsigned: after download useInstallieren.commandin the DMG, orxattr -cron the DMG/app if Gatekeeper says “damaged”) - Windows:
.exe(needs WiX 3) - Linux:
.deb(needsfakeroot), Arch tarball, and.AppImage
All three platforms are built by GitHub Actions (workflow Package, or a v1.0.0 tag).
- Move: Arrow keys (← →) or A/D
- Fire: Space or X
- Restart: R (after Game Over)
- Squad Entry: Enemies fly in along curved paths in squads, then settle into formation
- Squad Combo Bonus: Destroy an entire incoming squad before they settle = bonus points!
- Diving Attacks: After settling, enemies may dive toward the player
- Limited Ammo: Start with 5 simultaneous bullets. Slots free when bullets hit or leave screen.
- Explosions: Pixel-art explosion animations play on bullet hits and enemy/player deaths.
- Weapon Upgrades: Collect golden pickups (W) to upgrade:
- Grade 1: Single shot
- Grade 2: Double shot
- Grade 3: Triple shot
- Extra Ammo: Collect cyan pickups (+) to increase capacity (max 12)
- Death Penalty: Getting hit drops weapon grade by 1 (minimum grade 1)
- Basic (Red): Standard enemies, 1 hit
- Fast (Green): Quick and agile, 1 hit
- Tough (Purple): Armored, takes 3 hits
- Lives: 3 lives total
- Invulnerability: Brief i-frames after getting hit
- JDK 21 oder höher
- Maven 3.8+
mvn javafx:runDas Spiel deaktiviert automatisch Metal-Rendering auf macOS für bessere Kompatibilität. Bei Rendering-Problemen:
mvn javafx:run -Djavafx.options="-Dprism.order=sw"Oder alternativ:
mvn compile exec:javaDie Versionsnummer steht in der pom.xml (1.0.0). Dateiname: DeltaBlade-1.0.0-<os>-<arch>.
Lokal für das aktuelle System (JDK 21 mit jpackage):
mvn -Pdist verifyAusgabe: target/dist/
- macOS:
.dmg(unsigniert: nach dem DownloadInstallieren.commandim DMG nutzen, oder bei „beschädigt“xattr -crauf DMG/App) - Windows:
.exe(braucht WiX 3) - Linux:
.deb(brauchtfakeroot), Arch-Tarball und.AppImage
Alle drei Plattformen baut GitHub Actions (Workflow Package oder Tag v1.0.0).
- Bewegen: Pfeiltasten (← →) oder A/D
- Schießen: Leertaste oder X
- Neustart: R (nach Game Over)
- Squad-Einflug: Feinde fliegen in Gruppen entlang Kurvenpfaden ein und formieren sich dann
- Squad-Combo-Bonus: Zerstöre eine ganze einfliegende Gruppe bevor sie sich formiert = Bonuspunkte!
- Sturzangriffe: Nach der Formierung können Feinde auf den Spieler zustürzen
- Begrenzte Munition: Start mit 5 gleichzeitigen Schüssen. Plätze werden frei bei Treffer oder Bildschirmrand.
- Explosionen: Pixel-Art-Explosionsanimationen bei Treffern und Schiffs-/Spielertod.
- Waffen-Upgrades: Sammle goldene Pickups (W):
- Stufe 1: Einzelschuss
- Stufe 2: Doppelschuss
- Stufe 3: Dreifachschuss
- Extra Munition: Cyan Pickups (+) erhöhen Kapazität (max. 12)
- Todesstrafe: Bei Treffer sinkt Waffenstufe um 1 (Minimum Stufe 1)
- Basis (Rot): Standard-Feinde, 1 Treffer
- Schnell (Grün): Flink und wendig, 1 Treffer
- Zäh (Lila): Gepanzert, braucht 3 Treffer
- Leben: 3 Leben insgesamt
- Unverwundbarkeit: Kurze Schutzzeit nach Treffer
DeltaBlade/
├── pom.xml # Maven build configuration (FXGL 21.1)
├── src/main/java/deltablade/
│ ├── DeltaBladeApp.java # Main FXGL GameApplication
│ ├── DeltaBladeFactory.java # Entity factory (spawning)
│ ├── WaveManager.java # Squad spawning and combo system
│ ├── EntityType.java # Entity type enum
│ ├── GameVars.java # Game variables/constants
│ ├── EmbeddedTextures.java # PNG decoder (8-bit RGBA only)
│ ├── components/
│ │ ├── PlayerComponent.java # Player movement, firing, i-frames
│ │ ├── EnemyComponent.java # Enemy AI: entry, formation, diving
│ │ ├── BulletComponent.java # Projectile movement
│ │ ├── PickupComponent.java # Collectible behavior
│ │ └── ExplosionComponent.java # Animated sprite strip playback
│ └── tools/
│ └── ExplosionEditor.java # Standalone explosion sprite editor
└── src/main/resources/ # Resources
A standalone tool for authoring procedural pixel-art explosions and exporting them as animated sprite sheets.
Explosions are already integrated in-game via ExplosionComponent. Use this editor to create custom explosion effects.
mvn javafx:run -Pexplosions- Live 60fps preview with nearest-neighbor rendering (pixel-art style)
- Parameter controls: Duration, frame count, frame size (32/48/64/96), particle count, size over lifetime, color gradient (core/mid/smoke), gravity, outward velocity, drag
- Layer toggles: Fire, Sparks, Smoke, Shockwave
- Presets: Hit (tiny sparks), Ship (medium fire+debris), Tough (fatter orange), Boss (big multi-layer), Plasma (cyan/magenta), Sparks
- Playback controls: Play, Pause, Restart, frame scrubbing, loop toggle
- Seed control: Reproducible explosions via seed field + Randomize button
- Sprite Sheet: Click "Sprite Sheet exportieren..." → saves PNG + JSON sidecar
- Individual Frames: Click "Einzelframes exportieren..." → saves numbered PNGs + JSON
Exported PNGs are 8-bit RGBA, non-interlaced (color type 6), compatible with the game's EmbeddedTextures.decodePng().
Explosions are played via ExplosionComponent. To add custom sheets, embed them in EmbeddedTextures with keys like explosion_custom.png and spawn via:
spawn("explosion", new SpawnData(x, y).put("variant", "custom"));mvn javafx:run -Pexplosions- Live 60fps Vorschau mit Nearest-Neighbor Rendering (Pixel-Art Stil)
- Parameter: Dauer, Frame-Anzahl, Frame-Größe, Partikelzahl, Größe über Lebenszeit, Farbverlauf (Kern/Mitte/Rauch), Gravity, Outward-Velocity, Drag
- Layer-Toggles: Feuer, Funken, Rauch, Schockwelle
- Presets: Treffer, Schiff, Tough, Boss, Plasma, Funken
- Playback: Play, Pause, Restart, Frame-Scrubbing, Loop
- Sprite Sheet: "Sprite Sheet exportieren..." → PNG + JSON Metadaten
- Einzelframes: "Einzelframes exportieren..." → nummerierte PNGs + JSON
Exportierte PNGs sind 8-bit RGBA, nicht-interlaced — kompatibel mit EmbeddedTextures.decodePng().
# Compile only
mvn compile
# Quiet compile (no output on success)
mvn -q compile
# Package as JAR
mvn package
# Clean build
mvn clean installBuilt with FXGL's Entity-Component-System:
- GameApplication: Main game class extending FXGL's
GameApplication - WaveManager: Controls squad spawning, entry paths, and combo bonuses
- EntityFactory: Creates game entities (player, enemies, bullets, pickups)
- Components: Modular behavior attached to entities
PlayerComponent: Movement, firing, invulnerability framesEnemyComponent: State machine (ENTERING → FORMATION → DIVING)BulletComponent: Projectile physicsPickupComponent: Collectible animation and effects
- ENTERING: Flying along curved path toward formation slot
- FORMATION: Hovering in place, may randomly dive
- DIVING: Attacking toward player position
The architecture is ready for future features:
- Shop system between waves
- Shield power-ups
- Boss enemies
- Scoop mechanic for bonus collection
- Sound effects and music
- FXGL - JavaFX Game Library by Almas Baimagambetov
- JavaFX 21 - Graphics and UI
- Java 21 - Language
The pixel art sprites used in this game are from the Space Shooter Pack by RGS_Dev (Raphael Gonçalves).
- Asset Pack: Space Shooter Pack - Pixel Art 2D by RGS_Dev
- License: Free to use in games. Do not resell or redistribute as an asset pack.
Die Pixel-Art-Sprites in diesem Spiel stammen aus dem Space Shooter Pack von RGS_Dev (Raphael Gonçalves).
DeltaBlade is an original game built with FXGL and pixel art assets by RGS_Dev.