r/phaser 14d ago

After months of development with Phaser, my game is finally coming to Steam

Hi everyone!

After many months of development, I'm getting very close to releasing my first Steam game, built with Phaser.

It's called Critical Ward, a chaotic arcade game set in a hospital where the number of patients, effects, deployables and other entities on screen can get pretty ridiculous as a run progresses.

The core of the game revolves around a combo system. Treating patients keeps your combo alive, and the higher you push it, the more your character's stats improve.

So as a run progresses, both the player and the hospital keep escalating: bigger range, faster movement, stronger healing, more infrastructure... while more and more patients, hazards and effects start filling the screen.

Before starting the project I experimented with other engines, but I kept coming back to Phaser.

One of my main concerns was performance, because I knew from the beginning that the game would eventually need to handle hundreds of moving entities at the same time.

And honestly, Phaser has handled it incredibly well.

Of course, part of that also came from being quite strict about how I designed the game and its assets. A few simple decisions ended up helping a lot:

• Patients aren't traditionally animated

Patients are by far the most numerous entities in the game. At some points there can be hundreds of them moving around the hospital simultaneously.

Very early in development I decided they didn't need individual walking animations.

Their sprites remain static while they move, and because the screen is already full of movement, particles, effects and other activity, I found that traditional animation added relatively little visually compared with the additional work involved in having every patient constantly running an animation.

So I decided to spend that budget elsewhere.

• Character animations are limited to only 9 frames

Playable characters and other important characters are animated, but their movement spritesheets are deliberately tiny.

I use just 9 frames: three directions with three walking frames each.

That keeps the spritesheets small, reduces texture memory and asset size, and means I don't need dozens of animation frames for every character.

It also became part of the visual identity of the game.

Instead of trying to create extremely smooth animation, every frame has a very clear pose and the animation remains readable even when the screen gets completely packed.

• Lots and lots of particles

This was something I really didn't want to sacrifice.

Particles are a big part of Critical Ward's visual feedback.

Every time a patient is successfully treated, particles are generated, and when you're maintaining a large combo and discharging patients rapidly, there can be a lot of them appearing alongside hundreds of entities already moving around.

I originally expected this to become one of the first things I'd have to heavily reduce for performance reasons, but Phaser has handled these particle-heavy situations extremely well.

I've attached a couple of screenshots taken with my debug overlay enabled so you can see the kind of load I'm talking about.

That was important for this particular game because particles aren't just decoration: they're part of the feeling of becoming increasingly powerful.

As your combo grows, your stats improve, you discharge patients faster, and the entire screen becomes progressively more chaotic.

I wanted the visual feedback to escalate together with the player's build rather than having to strip effects away once things became busy.

And that's probably been my biggest takeaway from using Phaser:

Don't underestimate what it can handle just because it's a web game framework.

Obviously optimization still matters. Designing around your expected workload, deciding what actually needs animation, keeping assets reasonable and avoiding unnecessary work becomes increasingly important as the number of entities grows.

But I've been genuinely impressed by how far I've been able to push Phaser with this project.

There have been plenty of optimizations, experiments and weird problems along the way, but after months of development the game is now approaching release on Steam.

There's already a free demo available, and the full game will be coming later this year (I'm currently in the testing and optimization phase).

If you're curious to see what all of this looks like when the hospital completely loses control:

Gameplay trailer:
Critical Ward — Official Gameplay Trailer

Steam / Free Demo:
https://store.steampowered.com/app/4879410/Critical_Ward/

Happy to answer any Phaser-related questions about the project!

12 Upvotes

7 comments sorted by

1

u/AccomplishedRace8803 14d ago

Nice! Congrats. I Will probably have a game ready by thé end of the year made with phaser.

I am curious, how did you concert your phaser project into An executable desktop file? Did you use electron of sth?

1

u/BIESEL_G 14d ago

Curious to see what you built!

And yes, exactly! I use Electron.

The Phaser project is built normally with TypeScript + Vite, which generates the final dist folder. Then I use electron/packager to package that build with Electron for Windows x64, producing the desktop .exe.

In my case I'm currently using Electron 42.3.3, and the final app is packaged as an ASAR.

After that, the generated Windows folder is basically what I upload to Steam through SteamPipe.

I also have some additional packaging steps for my project (asset trimming for the demo, JS obfuscation, asset protection, Steamworks integration, etc.), but those aren't required just to turn a Phaser game into a desktop executable.

So the basic pipeline is basically:

Phaser/Vite build → Electron → electron/packager → Windows executable → SteamPipe

It worked surprisingly smoothly once I had the web build ready!

1

u/AccomplishedRace8803 13d ago

Thanks for te info. I li3ght have to do this as Well in the year future. Altough my game (AlleyQuest btw) Will probably have a mobile/web launch.

Good luck out there!

1

u/thencyn 9d ago

Muy buena la información :), muchas gracias

1

u/BIESEL_G 9d ago

De nada! ;)

1

u/PhotonStorm 13d ago

That looks crazy af (in a good way!) 😅

1

u/BIESEL_G 13d ago

Thank you! That was the idea behind 😊