Implementation of gray-scale conversion of the map

In development of high visibility config for q3a i came across this thread and inspired particularly by this screenshoot: i came with idea of implementing such a feature into ioq3 engine. There is already ability to apply grayscale for whole screen, but what if we could apply it only to map layer? (lights/textures/shaders). All layers except hud, models and map entities. It would imho greatly improve visibility and decrease amount of distractions caused by colourfull chaos on some bight maps. Especially for those, who don’t want to (uglyfy) blur textures with picmip (i hate that) and plays with little white dot as crosshair.

I did some resarch and was able to implement grayscale conversion, basing on implementation of mapOverBrightBits. So i would like to add new cvar r_mapGrayScaleLevel with float value between 0-1. 0 (default) means no transformation applied, 1 means full grayscale conversion computed as: RED_WEIGHT * r + GREEN_WEIGTH * g + BLUE_WEIGHT * b (RED_WEIGHT = 0.299; GREEN_WEIGTH = 0.587; BLUE_WEIGHT = 0.114;). Value between 0 and 1 - higher the value is, closer the channels to common gray are. Conversion would be applied just after mapOverBrightBits in R_ColorShiftLightingBytes/R_ColorShiftLightingFloats in renderergl2/tr_bsp.c and R_ColorShiftLightingBytes in renderergl1/tr_bsp.c.

Diffrence is already significant on most maps, as you can see on screenshots.

If this discussion goes well, i would like to contribute and make a pull request on github.

Take a look:
(value of 2 gives only red channel, so i can show, what map areas are actually affected. It’s for testing purposes and won’t be available in final patch.)
I would like to know opinions on that feature and possible implementation.

To be honest, this looks like cheating at a certain point. Not saying there isn’t room for it in the pantheon of things people would do with this engine, and you can always fork ioquake3 yourself or have this be your awesome mod for other people who want to play this way, but it seems kinda weird to me to go beyond what the game and engine already offer for visibility options. We will never accept a pull request for making characters more visible than the engine and baseq3 already allow.

I wonder how many of those options were only there for low-spec machines and ended up getting used in the case of “esports”. The game that is being played in those configs looks like garbage and it kind of ruins it for people who want to play the game the way it was meant to be played.

I disagree. I know quake live is not ioquake3, but as You can see on screenschoots in mentioned thread it’s officially allowed in closed-source quake live and nobody complains about that and such configurations are not considered as cheating. Turning off blood, gibs, dynamic lights, playing with gamma, intensity and picmip is quite a standard since beginning of q3a. To be honest if you won’t tune up your config to improve visuals you can’t even think about any serious gameplay on competitive level, especially with experienced players.

Who do You mean exactly? All contributors need to agree to implement something or you vote?

I know i can, but i would make it official part of ioquake3.

Besides, who play baseq3? It’s simply doesn’t meet players expectations. Right after releasing game code OSP mod was crated and become a standard, even on official QuakeCon. It was widely accepted by community and ID itself.

I agree. And that’s why i propose an alternative for those, who don’t like to play with r_picmip 9. Finally, fun from playing quake3 does not come from nice graphics.

There is baseq3 for these people. mostly newbies. Mostly.

Since we can make visuals ultra bright by playing with gamma/intensity/overBrightBits/mapOverBrightBits why can’t we make it grayscaled?

As you say, quake live is not ioquake3. We aren’t here to significantly alter the gameplay or visual design of baseq3. ioquake3 for better or for worse is baseq3. Most of the changes that have gone into QL aren’t for me as an old man who grew up with Quake 1, 2, 3, but the core part of QL that is still fun for me is exactly what is in baseq3. I’ll always have fun with that and I won’t want to change it.

We isten to reasonable arguments, and this is definitely something that can be argued about, but we aren’t going to substantially alter the original gameplay to suit modes of play that aren’t currently supported.w

At this point, you’re absolutely right that the fun of Quake 3 isn’t in the graphics. Anyone coming at it fresh would probably be turned off by that, and that’s fine. There is still something compelling in the gameplay and I don’t want to change that by significantly altering the visual style to suit competitive players. You could also mod the game to add a giant glowing arrow pointing to players, or just build in a wallhack. It’d be dumb and ruin the game for everyone.

Because visually altering the game to suit competitive play is not an enhancement, it’s a detriment to everyone who isn’t playing with some special esports config. Features that are in the renderer now aren’t going to be pulled out but we aren’t going to add baloney “esports features” just to impress the part of the player community that has moved on to QL.

At this point i should ask: what was the intention, vision and goal of forking q3a (as idtech3 + baseq3) at the beginning? Is there any written set of rules, what could and what will not be implemented into ioq3? Any specific plans for future?

Besides, i propose a little change (improvement), very similar to features already present, not anything revolutionary that would significantly alter the gameplay. It would not matter much in general, since playing quake is not just pointing crosshair at the enemy. It’s waaaaay more than that.

Look at it on the other side. I play since 2005 and i think any one who is seeking way to improve skills moved away from baseq3 to osp/cpma to find more competitive play, visuals included. It’s kinda natural, when you are no match for beginners playing baseq3. It’s not fun for You, and for sure not for them. Developing perfect config is part of that quest and self-evolving. Following Your logic, using ioquake3 (with voip, ql mouse acceleration style and other features not included in original client) might be detriment to players who is using original ID’s client. And even considered unfair and cheating, looking from some point of view.

It’s going to be an engine feature, not game (baseq3) itself. It would be mod independent. What do You mean by modes of play that aren't currently supported ?

It’s not a goal to impress anyone. I think this particular change won’t do any harm to the game. It’s just an option and no one is obligated to use it. Not all experienced players moved to QL. And these players would have nice alternative to picmip. Inexperienced players playing baseq3 won’t even noticed it, even might not using ioquake3 client at all. I think experienced players would find it quite useful.

If You would remove these baloney "esports features" i think many pro players would start using first fork of ioq3 that would has it.

Don’t get me wrong. I do respect and understand Your point of view, and You have every right to reject my idea. Maybe right place for that is mod, but i’m not going to start new one just to implement this particular feature. I want make it available to anyone regardless mod they are playing. I’m trying to prove it’s not harmful to game or community. Maybe game (and engine) after 16 years does need some new features and enhancements. Worst things already happened, twice. First time when ID decided to publish game updates with incompatible protocols and second time releasing QL as new game. It could be official mod replacing baseq3 with some online status/features. Also i think those esports features is one of the key factors that made this game alive after all these years.

To summarize,
I would like to add this small baloney esports feature to deliver nice and acceptable alternative to picmip for players, who don’t want to uglyfy visuals and maintain high visibility config.

Hi. I made official pull request:

Now final decision is Yours and i’ll nicely accept it, whatever it would be.