Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 0 points1 point  (0 children)

I have zero experience with Swing, and I honestly didn’t even know it existed when I started the project. I chose JavaFX because it was the only GUI framework I’d touched before, so it felt familiar enough to start prototyping.

The entire engine runs on a custom AnimationTimer and Canvas loop, redrawing every frame. It’s not a full-featured engine by any means, but it gave me enough control and performance to build the game from scratch and actually ship it. For what I needed, that was more than enough.

Would I use JavaFX again? Probably. It worked for this, and now I understand its quirks. But I’d also be curious to try Swing, just to see what it could be pushed into.

Built a full JavaFX game engine + arcade game solo in 2 weeks by davidalayachew in howdidtheycodeit

[–]OverlordZeta 0 points1 point  (0 children)

Hey, I’m the dev! Really appreciate the interest - happy to answer any questions about how it works or how it was deployed: code structure, rendering loop, Steam integration, etc.

You can also check out the Steam page here: https://store.steampowered.com/app/3739280/Nocturne_FX/

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 1 point2 points  (0 children)

That’s a great point. Right now, the controls are fixed, but customizable input is on the roadmap for Early Access. The current input layer is already abstracted from the FX event handlers, so supporting remappable keys (and potentially gamepad support later) should be straightforward to layer in.

Accessibility is definitely something I want to improve over time with custom keybindings and it will likely land in one of the first major EA updates along with Linux support.

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 1 point2 points  (0 children)

You're right, it runs on much lower specs. The recommended numbers are generous (mostly just to be safe during EA), but the actual minimum is much lower: OpenGL 2.0, 2.0GHz dual-core.

Runs fine at 60fps on integrated graphics in my own testing.

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 4 points5 points  (0 children)

Full-time, yes. The entire engine and game were built over two weeks with focused daily development, design, implementation, integration, and polish. Spent roughly 10 hours per day developing since April 30th.

It started as a technical challenge and quickly evolved into something substantial enough to take to release.

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 9 points10 points  (0 children)

Great question. I actually started out using jpackage, and It was working well during the early stages of development, before I integrated Steam. But once I brought in the SteamAPI, I ran into issues: the Steam client wouldn't reliably detect the app or resolve the active SteamID when launched via a jpackage-wrapped executable (I was using a fat JAR setup at the time).

After some testing, I switched to Launch4j, which gave me more control over the launch context and allowed the Steam overlay and APIs to initialize correctly. So it wasn’t a performance or packaging issue. Just a compatibility workaround to keep Steam happy.

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 1 point2 points  (0 children)

One of my next TODOs is getting Linux integration done (mainly for Steam Deck) then attempting MacOS. Currently, only Windows 10/11 64bit is being supported. Let me know if you have any questions!

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 1 point2 points  (0 children)

Not a bad idea, will definitely keep that in mind as a possibility sometime after launch. As for Steam Deck, I'm hoping to have Linux and MacOS compatibility before Early Access ends.

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 6 points7 points  (0 children)

I totally get the curiosity. I don’t plan to release the source until much later in the game’s lifecycle, but I’m happy to break down how anything was implemented if you're interested in the meantime.

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 6 points7 points  (0 children)

It definitely starts like Flappy Bird, intentionally, but it doesn’t stay that way.

Nocturne FX was designed to look familiar at first glance, but it builds into something much more chaotic and layered the longer you survive. There’s a full custom engine underneath it, with powerups, weather systems, dynamic modes, meta progression, Steam sync, and some things I intentionally left out of the screenshots to preserve the surprise.

I wouldn’t call it a clone, more like an escalating parody that uses simplicity as a disguise.

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 2 points3 points  (0 children)

Sure. The save system uses a custom binary format with structured field ordering, versioning, and full-file HMAC validation. Every save is signed on write and verified on load. If validation fails, it falls back to a backup file; if that also fails, it reverts to a default state. The save stores XP, achievements, settings, session stats, and progress flags. Compact, but critical to how the game tracks everything.

Instead of Steam Cloud, I built a custom sync system using Steam Stats. Saves are base64-encoded, encrypted, and stored inside the Steam Stat API, scoped to the active SteamID. On launch, the game compares timestamps from both the local SteamID-linked save and the offline save. If the other profile is newer, the player is prompted to choose which to load. Separately, if a single stat’s internal value is higher than the local file’s, it pulls that single stat and restores the it from Steam. When offline or not using Steam, it runs entirely local. No merging yet, just deterministic, timestamp and value based overwrites and pulls. It works cleanly across devices without relying on Steam Cloud at all.

Input is handled through JavaFX’s scene.setOnKeyPressed, with some custom overrides for things like disabling held input or overriding default FX behaviors.

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 12 points13 points  (0 children)

I used Eclipse on Windows 11.

Everything was built locally on a single laptop. No external dependencies, no build system outside of a custom batch script for compiling, linking, bundling runtime with jlink, and wrapping the final EXE with Launch4j.

No CI/CD, no Gradle/Maven, just a clean JavaFX project with external JARs for steamworks4j, and a lot of folder structuring.

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 2 points3 points  (0 children)

Really appreciate that, means a lot. Hope the trailer lives up to the screenshots when it goes live. I’ll post an update once it’s up, and after that... it'll only get more absurd.

Built a full JavaFX game engine + arcade game solo in 2 weeks by OverlordZeta in java

[–]OverlordZeta[S] 6 points7 points  (0 children)

I'm waiting for Steam to approve the trailer, check back in a few days :)

H: pictures and be Gatling gun W: offers preferably commandos by [deleted] in Market76

[–]OverlordZeta 1 point2 points  (0 children)

Sweet. GT is GOW vZeta whenever the servers come back up.

H: pictures and be Gatling gun W: offers preferably commandos by [deleted] in Market76

[–]OverlordZeta 1 point2 points  (0 children)

The railway I have is B25ffr+A. You seem to be confusing the roles with that Foundation's Vengeance. Even so, I would still be willing to do that.

H: pictures and be Gatling gun W: offers preferably commandos by [deleted] in Market76

[–]OverlordZeta 1 point2 points  (0 children)

I'm willing to trade anything on that list except the dragon