Doom on Playdate

Some time ago I saw online a new Doom Port that had the goal to be a bit easier to port.
https://github.com/Daivuk/PureDOOM

While the project doesn't seem to be very active I still like that most of the platform code is very separated from the Doom code. So I wrote a version for the playdate and this time I've put it on GitHub.

The big advantage is that everything playdate related is in the main file so it is really easy to adapt the control, add options, improve 1-bit conversion, etc.

PureDoom-Bayern44-noisy-anim
Running in the simulator. Dithering: Bayern 4x4 with noise

The current version runs in the simulator. It also boots on Playdate but it is not yet playable. The performance quickly drops until it crashes. I suspect there is a difference between clang and gcc because the playdate version has some weird behaviour and texture corruption.

Current Status
:white_check_mark: :desktop_computer: Playable in the simulator
:x: :playdate_black: Not playable but boots
:white_check_mark: :joystick: Basic control (move, shoot, interaction)
:x::sound: No music or sound effect


But one of the reason to dig back Doom is that I wanted to experiment a bit further with dithering.

In the first build I used ordered dithering with a big blue noise. I generally like how it can capture some finer details in an image and especially how gradients looks. However the image tend to be a bit blurry and also very ... noisy. That made the game not very enjoyable to play IMO.

PureDoom-BlueNoise

I usually dislike Bayer filter since I find the visible structure distracting. However It make the game much more contrasty especially with a 2x2. We lose some details but elements tend to be a bit more visible with it.

What I wanted to do is adding some noise to Bayer to break down the structure and make the overall look a bit more grungy/natural.
At first I had issue with distribution of threshold values but I use a very straightforward method that overall give some nice result in my opinion.

Bayer 4x4
PureDoom-Bayern44 No noise
PureDoom-Bayern44-noisy With noise

Bayer 2x2
PureDoom-Bayern22 No noise
PureDoom-Bayern22-noisy With noise

In the build, you can option the option menu to change the Bayer filter and the level of noise. I am still not sure what has the best result yet. Bayer 4x4 with Noise 2 looks better, but Bayer 2x2 with Noise 2 is more readable overall until we are in very dark part of the levels.

9 Likes