View Issue Details
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0000085||Gameplay + OpenGL||[All Projects] Feature||public||2017-01-20 07:08||2017-01-20 10:32|
|Summary||0000085: Means to query current supported feature set|
|Description||I've once brought it up in the forums, but I believe it makes a lot more sense to actually make a ticket about it.|
So the point is that in the mods, people often need to check for the software renderer.
But, as Graf and Eruanna have pointed out, QZDoom already has true-3D software renderer, which brings us to another point: what modders REALLY want to check is whether currently used renderer supports true 3D (i.e. 3D freelook).
Trivial use case that I just thought about: say, I want to query an actor of specific type directly under the crosshair. For example, a switch flatsprite/model.
Then, once I aim at this actor, I should get a HudMessage (scaled accordingly!) that draws outline around the switch and says "press USE to do something".
But! I need to SCALE the hudmessage properly. In a 2.5D renderer, I should use 2D distance calculation for the scale, but in 3D, it should be 3D as well, as I can have real pitch changes.
Currently, we can check for vid_renderer=0, but this is already broken in QZDoom.
Something like bool QueryFeature(<enum>) is desperately needed, just like extension querying in OpenGL — so that the modder can check what is supported and act accordingly, as opposed to trying to add hacky builtin automated ways for the engine to behave (like the proposed "replacement sprite" for unsupported flatsprites).
|Tags||No tags attached.|
Also, "this can be abused" is not an argument here IMO.
Yes, the modders can check for models being turned off and make the game unplayable because of that.
We already have ZScript, which is way more dangerous as to what modders can do with it. I don't think "protecting players from modders" works anymore.
As for forward/backward compatibility, the function could default to returning true if feature id is not known, thus causing the same mod behavior as if it was unchecked, instead of breaking completely.
Ports like Zandronum that lag behind could implement an "always return true" version too, until they get it right.
As-is - no, I will not support this feature because the playsim should behave exactly the same whether you have an 8-bit palette software renderer that supports absolute diddily, or if you're running with state of the art Vulkan with full shader support and all the fun effects (multisampling, SSAO, etc). Multiplayer and demos would break otherwise.
What I *will* support is a simple "render-if" - where *all* code is executed - no matter what - but you only see the effects of an actor that's designated to show in the 8-bit renderer, or the true-color renderer, or the OpenGL one.
>I will not support this feature because the playsim should behave exactly the same
We are going low level with ZScript, and we are already expecting the modder to know what they are doing, so it should be modder's duty to put +NOINTERACTION in such cases.
As for the demo support if you are worried about that, the feature set that was used _during recording_ could be stored in the demo for 100% reconstruction, as well as global override during networked games (although do note that networked games are ALREADY broken).
If things will break for the players as the result of feature set not matching their actual one — well that's their problem already. The demo/networking should warn that it may not look as expected.
"Renderer-if" sounds like another gross hack construct in the language that serves no other purpose other than limit modder's abilities to perform modding, in the end frustrating both the modder and the developer that has to support all that stuff later.
Besides, it may not be related only to rendering. Think mods that support both GZDoom and Zandronum.
For example, they would be able to check for something like FT_ACS_281 (ZDoom 2.8.1 acs feature level), and if this is not available, use their own (often slower or hacky) ways to do stuff.
I don't understand how can we at the same time implement the all-powerful (by definition) scripting language and still limit modders' capabilities by developer's view on how it should be done. Remember: the developer won't always be there to deal with all the edge cases. If this is done like you suggest, people can and will continue to write terrible, unobvious, deprecated and backwards incompatible code and essentially the engine will have to support these hacks forever, as removing them would mean that "mod X is no more supported".
As for the "playsim should never change": we already allow changing the playsim based on arbitrary uncontrolled values out of the space by allowing user CVars, and by allowing to query NON-USER CVars which are not always stored in the demo.
|Just because GetCVAR was badly implemented does not justify breaking a broken situation further. GetCVAR should be fixed and it is one of the things I had been planning on doing.|
|You cannot fix that part. GetCVar is obsolete anyway beyond user variables and there's more than enough options to query stuff that's not synchronized. I cannot restrict CVar access because other parts of the engine, like the statusbar or menu need access there, and it's impossible to tell if code is demo-sync-critical or not at compile time.|
Please don't ignore the rest of my post: what's wrong about force-synchronizing feature sets over demos and networking?
And what will we do about it later? The more code is zscriptified, the higher probability of demos breaking there is. This is because ZDoom has broken demo mechanism by design; for proper demo mechanism, see Zandronum which essentially dumps the server packets to the disk, and as such it always reproduces things exactly the way they were first behaving, without any ways to desync.
The procedural demo playback is very good, but — for small and simple engines like PrBoom, not as feature-rich as GZDoom.
In the long term we can probably look at something like this, if the network code ever matures past its current state. For right now, though, the deterministic model is all we have, and it should be followed as much as possible, even if it's not 100% up to par right now.
I am going to go ahead and close this issue because it is not worth an argument that will ultimately devolve and upset everyone involved. I am sorry, but that's not what the tracker is for. If you want to debate this, please bring it to the forum, instead.
|2017-01-20 07:08||ZZYZX||New Issue|
|2017-01-20 07:12||ZZYZX||Note Added: 0000148|
|2017-01-20 07:21||ZZYZX||Note Edited: 0000148||View Revisions|
|2017-01-20 08:59||Rachael||Note Added: 0000151|
|2017-01-20 09:05||ZZYZX||Note Added: 0000152|
|2017-01-20 09:06||ZZYZX||Note Edited: 0000152||View Revisions|
|2017-01-20 09:08||ZZYZX||Note Edited: 0000152||View Revisions|
|2017-01-20 09:09||ZZYZX||Note Edited: 0000152||View Revisions|
|2017-01-20 09:10||ZZYZX||Note Edited: 0000152||View Revisions|
|2017-01-20 09:11||ZZYZX||Note Edited: 0000152||View Revisions|
|2017-01-20 09:13||ZZYZX||Note Added: 0000153|
|2017-01-20 09:15||ZZYZX||Note Edited: 0000153||View Revisions|
|2017-01-20 09:20||ZZYZX||Note Edited: 0000153||View Revisions|
|2017-01-20 09:58||Rachael||Note Added: 0000154|
|2017-01-20 10:18||Graf Zahl||Note Added: 0000155|
|2017-01-20 10:18||ZZYZX||Note Added: 0000156|
|2017-01-20 10:19||ZZYZX||Note Edited: 0000156||View Revisions|
|2017-01-20 10:21||ZZYZX||Note Edited: 0000156||View Revisions|
|2017-01-20 10:22||ZZYZX||Note Edited: 0000156||View Revisions|
|2017-01-20 10:32||Rachael||Assigned To||=> Rachael|
|2017-01-20 10:32||Rachael||Status||new => closed|
|2017-01-20 10:32||Rachael||Resolution||open => won't fix|
|2017-01-20 10:32||Rachael||Note Added: 0000158|
|2017-01-29 21:18||Rachael||Category||Suggestion => Feature|