News | Forum | People | FAQ | Links | Search | Register | Log in
Fitzquake Mark V
I wasn't planning on doing this mini-project, it started as an effort to address some Fitzquake issues, fix them the right way up to Fitzquake standards (i.e. do it right, once and properly versus continual releases) and donate it back.

FitzQuake Mark V Download:

http://quake-1.com/docs/utils/fitzquake_mark_v.zip

Short version: Eliminated most issues in FitzQuake thread, most issues I can even remember hearing of ever and marked every single one clearly with a very minimal implementation.

It may be the case that only metlslime and Quakespasm and engine coders may find this engine upgrade of interest.

Features: 5 button mouse support, single pass video mode, external mdl textures, alpha textures (like RMQ), record demo at any time, rotation support, video capture (bind "capturevideo toggle"), console to clipboard, screenshot to clipboard, entities to clipboard, tool_texturepointer, tool_inspector (change weapons to see different info), clock fix, contrast support, fov does not affect gun, gun displays onscreen, Quakespasm wrong content protection, external ent support, session-to-session history and .. (see readme).
First | Previous | Next | Last
 
Maybe I'm wrong ... it's too early in the morning. 
@OctopusFan 
I think you're actually making two arguments here, one of which is valid but the other of which is bogus, and unfortunately you're using the valid argument as justification for the bogus one.

The valid argument is that there is a pixel-art aesthetic in Quake, with lots of pixel-level detail in it's textures that the default linear filtering used by GLQuake ruins.

However, that should not be extended to try argue that a lot of the rest of Quake's original grunginess is either deliberate, or finely crafted, or efficiently coded, or whatever.

You see, the evidence is there in the code itself, in comments in the code, in sources like interviews, .plan files, Michael Abrash's Black Book, the Masters of Doom book, and so on. The thing is: id Software were very open about discussing Quake and it's development and none of this is a secret.

Take Quake's colormap for example; you absolutely positively cannot try to argue that it's in any way finely crafted, because it's not, and we have the proof. It's just a brute-force nearest-colour match: https://github.com/id-Software/Quake-Tools/blob/master/qutils/QLUMPY/QUAKEGRB.C#L203

Likewise .MDL files: you cannot claim that the reduction of position vertices to 8-bit is anything other than a crude scale and bias, with type conversion, because once again the evidence is there in the modelgen.c source code.

If you look at the code and other sources you'll see lots of "fixme" comments, you'll see Carmack's "I hate our model format!" remark, and more. It's a matter of public record that Quake's development was one year of experimentation followed by 6 months of an insane rush to get it finished and released. So please don't try to claim that there's much in the way of deliberate craft there.

The majority of modified winquake engines seem to be enthusiast projects to show off the latest visual feature. This is worthwhile for working on experimental features, but much less so for the mappers and gamers.

If you were talking about Quake clients back in 2002 or 2003, you'd be right because that's the way the majority of Quake clients actually were developed back then. I was there, I remember it. Making such a claim about an engine such as Fitzquake, which has an explicit goal of remedying the areas where GLQuake is inferior to software Quake, just shows that you haven't been paying attention. 
I Was Saying Boo-urns 
I am one of the people who loves the look of software quake, because of the hue shifts in different light levels, which imo gives it a more appealing and painterly look. If this is not intentional, as mh implies, it doesn't matter to me, I still like the way it looks. I also love the way the light is banded and not smooth. It's a proper retro look and has its own charm.

You lose the subtle shift of hues with GL engines, but obviously you get better preservation of the texture art, coloured lighting, fog and all the other cool stuff. 
#1036 
The UT renderer is 16-bit, IIRC. However, it doesn't feature all the effects of its hardware counterpart, so it still fits my description. Combining all of those different effects together requires a lot of work.

I was going to use a 16-bit indexed color palette, with textures using only 256 colors from that, so most color transformations could be done with a single ( (texel << 16) | pixel) operation. But all tables together would consume lots of memory, and reducing their sizes to fit into the L3 cache would kill the smoothness I was trying to achieve. I even thought of an approach using a special texture format, but that would require creating special tools and extra work steps for the asset creation, not to mention that Quake compatibility would go out of the window. 
 
Ahh OK ... I love software rendering. It just has a character that hardware doesn't seem to retain. 
 
mh, thanks for the explanation of safety of Hunk_Alloc'ing static ents, helps me visualize things :) 
@mk 
A 10 minute experiment on Mark V WinQuake. Some success ... but spans must be clipping each other so incomplete.

WinQuake screenshot:

screenshot 
Attempt 2 
2nd - 10 minute experiment .. WinQuake alpha masked models. Part 2.

Success!

screenshot

It works! Rather surprised in a way, nothing is ever easy with the internals of the software renderer. But this particular time, not so hard. 
 
Which method did you use? Doing a whole pass for each surface is easy, but not optimal. 
 
It was a 2 liner. Here's how it worked:

D_PolysetDrawSpans8

if ((lzi >> 16) >= *lpz)
{
byte bsrc = ((byte *)acolormap)[*lptex + (llight & 0xFF00)];

if (bsrc != 255) { // Baker: masked theory.
*lpdest = bsrc;
*lpz = lzi >> 16;
}
}


I feel like a complete jerk as result. 
 
Oh, that's a MDL. I thought it was a BSP. 
Baker 
Awesome! 
 
wow baker, this is great! thanks for taking a chance on the alpha textures on models! 
 
Surely it should be "if (*lptex != 255)" - I don't know if palette index 255 can ever come out of the lighting calculation, but that aside, alpha should come from the base texture anyway. 
 
You are right. I only spent a few minutes, tried a quick experiment and it worked. I think the above happens to work because 255 is a fullbright. 
Feb 7 2016 - Beta Build 
Windows Open GL + WinQuake | Windows Direct X Version

* Alpha masked models support (set .mdl's QME 3.1 0x4000 flag)
* Alpha masked models for WinQuake version too
* No limit static entities
* RCON remote console support (ProQuake compatible) + full NAT fix.
* sv_map_rotation "dm3 dm6 dm4 dm6" --- map rotation via cvar - repeated names fine, it won't get confused.
* May have (all?) obscure mod bug-fixes that NightFright pointed out.
* Install from Quaddicted. Type "install travail" for instance. Type "uninstall travail" to uninstall.
* No dependencies at all. Just single .exe

Source. Maybe next time will update Mac build. 
Impressive 
 
Baker 
will this play orl's new map set? 
 
ericw did a very kind thing by making a scrappy custom Quakespasm executable with "protocol 999" support for orl's map so more people might try it.

As I understand it, it isn't true protocol 999 and wouldn't be able to play, for instance, RemakeQuake like the RemakeQuake Engine can screenshot.

So it's not a real protocol -- it's just something kind that ericw did for ORL. 
Protocol 999 
It's been a while but IIRC protocol 999 was deliberately designed to be modular; if I've got this right, a standard protocol 666 data flow is also a valid protocol 999 data flow with the exception of the protocol version number and an extra int which is used to specify what optional features are used.

Again working from memory, clients and servers then use that extra int to negotiate what set of these optional features they both have in common, and from there features are enabled or disabled.

So in theory even a "scrappy protocol 999" is therefore also a valid protocol 999.

But like I said, this is all from memory. The last released version (which was not supposed to be final) may or may not support all of this, but what I've just described is certainly what the intention was. 
MH 
This interests me. It's one of the goals of my protocol experiments.

Got more detailed info on this? 
999 
scrappy = perfectly adequete.

possible host_errors is better than unconditional host_errors, imho.
partial is better than none.

unless baker wishes to propose a different solution for large maps or jerky rotations? :P 
@mankrip 
// protocol flags
#define PRFL_SHORTANGLE (1 << 1)
#define PRFL_FLOATANGLE (1 << 2)
#define PRFL_24BITCOORD (1 << 3)
#define PRFL_FLOATCOORD (1 << 4)
#define PRFL_EDICTSCALE (1 << 5)
#define PRFL_ALPHASANITY (1 << 6) // cleanup insanity with alpha
#define PRFL_INT32COORD (1 << 7)
#define PRFL_MOREFLAGS (1 << 31) // to do - support this...

if its protocol 999, then read a 32bit integer interpreted as the above flags. those flags define how it differs from 666.
If there's a bit set that you don't understand, error out or something.

there is no handshake/negotiation in rmqe, the server dictates and clients are expected to fall in line.

rmqe uses PRFL_INT32COORD| PRFL_SHORTANGLE| PRFL_EDICTSCALE
qs-oms3 uses PRFL_INT32COORD| PRFL_SHORTANGLE
fte uses PRFL_FLOATCOORD| PRFL_SHORTANGLE (which matches dpp5+ and fte clients, as well as avoids extra inprecision...).

ericw missed te 255 apparently (but so does fte, so whatever).
He also missed U_SCALE (which might come back to bite him with illegible server messages on rmqe servers).
QS should probably also warn if any protocol flags are set that his client doesn't support, again to avoid any bewildering illegible server messages.

personally I'd recommend against having the client distinguish between 666 and 999 other than to parse the flags. its simpler to treat them identically except with 666 having flags 0, but that's just my opinion because I hate lots of OR expressions all over the place. 
 
Obviously I want smooth rotation. Would ideas behind this protocol permit the following to evolve in it:

1) Prediction
2) Baseline compression/ack frames.
3) EF_FOLLOW, EF_NODRAW and other flags like DarkPlaces, view weapons
4) Possibly connectionless connections.
5) Team scores in multiplayer? 
@mh 
"alpha insanity" -- that appears several times in the RMQ engine source code. Could you explain what that means? Is that how .alpha in FitzQuake 0.85 if 0 for a new entity should actually be --- I think 255 is full alpha, but I haven't looked. 
First | Previous | Next | Last
This thread has been closed by a moderator.
Website copyright © 2002-2024 John Fitzgibbons. All posts are copyright their respective authors.