Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spectre Visibility Aid? #2040

Open
a1-21 opened this issue Nov 20, 2024 · 18 comments · May be fixed by #2043
Open

Spectre Visibility Aid? #2040

a1-21 opened this issue Nov 20, 2024 · 18 comments · May be fixed by #2043

Comments

@a1-21
Copy link

a1-21 commented Nov 20, 2024

Is it possible to add a spectre visibility aid option? Maybe instead of it using an alternating pixel pattern, it has a constantly translucent silhouette. Anything would help. Also would like if it didn't clash with the strict compatibility option.
I don't know about a vast and well defined dsda recording ruleset, so I think if different ports can handle spectre rendering basically any way they like, a slightly more visible spectre effect would be permissible.
I just wanted to get this out here before an update comes out, because I have no experience in building from source code, and this spectre issue is a pain in the neck for me.

@rfomin
Copy link
Collaborator

rfomin commented Nov 21, 2024

In Woof, we implement "blocky" spectre rendering, so the effect looks exactly like vanilla at any resolution.
Original algorithm, resolution scale 100% (320x200):
woof0003
"Blocky" algorithm, resolutions scale 300% (600p):
woof0002

I don't know about a vast and well defined dsda recording ruleset, so I think if different ports can handle spectre rendering basically any way they like, a slightly more visible spectre effect would be permissible.

This is a technical limitation, spectre drawing is hard to implement like vanilla in OpenGL. But in recent versions of DSDA-Doom it's very close.

@a1-21
Copy link
Author

a1-21 commented Nov 21, 2024

I know about that option, but I find it doesn't help me that much. It definetly makes them prettier, but isn't much in terms of visual aid

@fabiangreffrath
Copy link
Owner

Is it possible to add a spectre visibility aid option? Maybe instead of it using an alternating pixel pattern, it has a constantly translucent silhouette. Anything would help. Also would like if it didn't clash with the strict compatibility option.

Spectres are hardly visible for a reason, they are supposed to be like this. So, if you are asking for an option to make them less hardly visible, and you record demos with this option, then that would be unfair against others who record demos with the standard spectre visibility. Thus it's bound to strict mode.

What you could do, though, is make a DEH patch that removes the MF_SHADOW flag from the spectre actor and e.g. set the MF_TRANSLUCENT flag instead, and then auto-load this DEH patch. That would still be strictly unfair for demo recording, though, but that's nothing that the port would be able to detect and prevent.

@a1-21
Copy link
Author

a1-21 commented Nov 21, 2024

I know spectres are meant to be hard to see
I'm not trying to suggest anything like this:
image
image

Instead maybe something like this:
image

I don't want the spectre's position to be clear as day, I just want to have an option to get rid of that damn pixel pattern

@fabiangreffrath
Copy link
Owner

@rfomin What do you think? I am inclined to close this as "wontfix", because I am not going to change the appearance of a Doom monster to increase its visibility. On the other hand, we already have an option to change the appearance of the invisibility powerup. 🤷

@ceski-1
Copy link
Collaborator

ceski-1 commented Nov 21, 2024

This sounds like the selective fuzz darkening feature I added to Nugget Doom (because the idea was rejected for Woof). Why not port that back to Woof and update it with these changes? It can have a strict mode condition.

@fabiangreffrath
Copy link
Owner

Is it right that the only difference between this mode and the original fuzzy rendering mode is that instead of always darkening the neighbor pixels using the 6th colormap, it randomly uses the 6th, 4th, or 8th colormap?

@a1-21
Copy link
Author

a1-21 commented Nov 21, 2024

What's the change to the invisibility powerup?
+That selective fuzz actually looks good compared to vanilla

@ceski-1
Copy link
Collaborator

ceski-1 commented Nov 21, 2024

Is it right that the only difference between this mode and the original fuzzy rendering mode is that instead of always darkening the neighbor pixels using the 6th colormap, it randomly uses the 6th, 4th, or 8th colormap?

No, it's really simple. Basically, only one darkening pass is used. There's a explanation by Linguica in the link.

@rfomin
Copy link
Collaborator

rfomin commented Nov 21, 2024

I like "selective darkening" option, it looks interesting

@a1-21
Copy link
Author

a1-21 commented Nov 21, 2024

I've played around with it in nugget doom, and it doesn't help with visibility at all. If anything it worsens the problem. But it does look way better than what vanilla had in store.

@rfomin
Copy link
Collaborator

rfomin commented Nov 21, 2024

I've played around with it in nugget doom, and it doesn't help with visibility at all. If anything it worsens the problem.

We can do three options: original, selective, translucent. But translucent just looks boring.
While invisibility powerup or red blood palette can be very annoying for some, I don't think spectre rendering is a big problem for a11y.

@a1-21
Copy link
Author

a1-21 commented Nov 21, 2024

I think a pure translucency would do the trick really well. Maybe it wouldn't be that interesting, but turning off a pain palette isn't interesting and, regardless of that fact, it does the trick for many people.
Maybe I was a bit too greedy with the strict mode suggestion, but I really don't think this is that big of a deal demo-wise, since the person recording the demo could just jump ports and renderers if they were too annoyed by the spectres. But it is a big deal feature wise. I think it's right there along with pain palettes and invuln effects.
I'm not sure if you meant me by

I don't think spectre rendering is a big problem for a11y.

but if you did, it IS a big problem for me. In pretty much any halfway tough map that features them, I consider jumping ports for a different renderer or anything at all.

@rfomin
Copy link
Collaborator

rfomin commented Nov 21, 2024

I'm not sure if you meant me by

I don't think spectre rendering is a big problem for a11y.

Sorry, I meant accessibility (a11y).

@fabiangreffrath
Copy link
Owner

If people really suffer from deciphering the spectre pixel salad, I think we can colormap the sprites to gray and apply translucency. @JNechaevsky didn't you have something like this for Inter Doom?

@rfomin rfomin linked a pull request Nov 22, 2024 that will close this issue
@JNechaevsky
Copy link
Collaborator

No, no longer. I didn't took b&w fuzz effect into modern Inter since implementation was resource-dependent, and I wasn't able to reproduce your approach of desaturated sprite drawing that you wrote about six years ago. Nowadays I'm just having a "Translucent" option for fuzz drawing, which is basically a replica of DrawTLColumn, but with 25% opacity. It should also work for TrueColor;OFF code, but I haven't touched it for a long time, but it's still here.

P.S. I apologize, I felt into few week hiatus by trying to learn something different and new, but everything if fine, even better than before. I will be on one-week vacation from 25th November, so I can finally will be able to properly finish LUT translucency. And explain some farther thoughts with it.

@JNechaevsky
Copy link
Collaborator

A bit offtopic for current Woof's renderer, but I'll just leave it here for better times. 😉

const uint32_t I_BlendDarkDesaturated (const uint32_t bg_i, const int d)
{
    tcpixel_t bg, ret;
    uint8_t r, g, b, gray;

    bg.i = bg_i;

    r = bg.r;
    g = bg.g;
    b = bg.b;
    gray = (((r * 299 + g * 587 + b * 114) / 1000) * d) >> 8;

    ret.a = 0xFFU;
    ret.r = ret.g = ret.b = gray;

    return ret.i;
}

bw-fuzz

@NightFright2k19
Copy link

NightFright2k19 commented Nov 25, 2024

Not so sure about this one. Seeing them better is de facto a cheat. I mean, in singleplayer it probably wouldn't matter, but in MP anyone with this turned on would have an advantage. Having the greyscale invulnerability mode is OK since it reduces eyestrain. Here we're talking gameplay changing tweaks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants