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
3x Post 
Here is a Nehahra screenshot. This is actually the WinQuake renderer version:

http://quake-1.com/docs/any/nehahra.png

Other features I am remembering: autodemos and autosaves during game if cheats are not being used (and probably if frames per second is 72 = standard SDA Quake rule). Auto-saves appear in the bottom 3 slots in the load game menu, autodemos would obviously appear in the demo menu. cl_autodemo 0 turns off autodemo. Autodemo and autosave will keep no more than 3 saves at any time.

Another feature: Mark V will never load a config saved by another engine and fall back to a backup copy.

Mark V *should* be totally immune to the Zerstorer and Nehahra config meddling as it uses a method similar to FTE latched cvars to revert cvars to their correct values after cutscenes and/or QuakeC or demo-playback meddling. However, since I'm not sure of the features of the version I uploaded or what I was doing with the source code at the time, can't be 100% sure.

Other features: r_lavaalpha and r_slimealpha cvars since Quakespasm was pushing for that (but doesn't seem to have the cvars in Quakespasm itself?) 
Damn ... Unfortunate 4x Post 
Enhanced coop capabilities:

http://quake-1.com/docs/any/coop_scoreboard.png

Ping scoreboard, per player scores in coop.

If Mark V is hosting a coop game and teamplay 1 is set, the engine will ensure that all connecting players have the pants color of server host to prevent self-damage.

Feature can be disabled with sv_coop_enhancements 0. 
That Feature List Looks Huge 
I had some questions though:

* Protocol 15 serving compatibility. FitzQuake 0.85 can't actually serve a protocol 15 game.

Is this true? what does fitzquake do wrong?

* Switching to a gamedir will detect the correct map for the mod if possible and doing "Single Player->New Game" will run that map. For example, if you play lunsp1, it will run lunsp1.bsp doing Single Player->New Game. Or if the mod has a map named something like "warpstart" it will load that map.

How do you detect this? Are you scanning the entities lump to find "trigger_changelevel" and looking for what map points to the other maps? Or is it like, find the map with the fewest monsters? 
I May Be The Only One... 
In response to some of the posts above, but I think the RMQ engine was, and still is a fantastic engine, it was what is now Quakespasm. But I like it over Quakespasm for a few minor reasons, and it is my engine of choice for most things. Sure it has some flaws but what engine doesn't? I'm just curious as to why there is such a strong dislike for RMQ.

I don't mean to shift the conversation from Mark V, which is what this thread is about. I applaud you Baker for releasing a big update to the engine, I intend on playing around a lot with it. 
Baker 
I am so impressed by your persistence and skill. You went from (seemingly) zero to being a full on engine developer. That's awesome!

Quaddicted installer
Oh that would be too great! Some day, some day. :) 
Texture Filtering Modes 
I have tried the new builds a bit. The Winquake version doesn't run for some reason for me at all, crashes during startup (Win 8.1 x64, Intel Core i7-4770K @ 3.5 GHz, 16GB RAM, nvidia GF 770).
The DX8 build seems fine, but when using gl_texturemode "gl_nearest_mipmap_linear", it seems that floor/wall/ceiling and some model textures (e.g. health packs) keep bilinear/trilinear filtering. Does it require additional settings now or is something broken here? 
Auto-detect Start Map 
How do you detect this? Are you scanning the entities lump to find "trigger_changelevel" and looking for what map points to the other maps? Or is it like, find the map with the fewest monsters?

I would assume something like "is the map name the same as the gamedir name?" is a good first test to make. From there I'd move to something like "is there only one map in the gamedir?", from there maybe look for a map with "start" in it's name, then finally return "start".

This is a cool idea but what I'd really also like to see is, if the start map isn't called "start", then assume that it has no skill selection halls and pop up a skill menu before loading it.

That "Levels" menu is also cool, well done Baker! 
 
Possibly nice feature: highlight (in a subtle way) all maps (files) exclusive to the specified mod directory when using the maps (dir) command..

Possibly nice feature #2 (half-joking): enable the engine to display the mod's/map's readme, so the player can look up things like the start map himself (because there's only so much auto-detection it can do). 
@metlslime 
During sign-on, FitzQuake sends a message larger than protocol 15 can handle and preventing it gets to be very complicated (client scenario, server scenario, client and server, per protocol situations). There were 2 instances in one of the net_*.c source files that weren't being handled because those functions used sizeof on the buffer. Fixing that requires a global variable. 
 
@mh/metslime --- start.bsp --> *start*.bsp <gamedir>.bsp which catch the overwhelming majority of single player releases to the point that I can't name a release this doesn't work for offhand.

@negke "highlight (in a subtle way) all maps (files) exclusive to the specified mod directory" The maps menu in this Mark V does exactly that.

@mh - if the start map isn't called "start", then assume that it has no skill selection halls and pop up a skill menu before loading it. Although not in this build, I rolled the bsp compiler into the engine and was going to have to do things like that, including constructing an "Undergate" like map in real time and devised a mechanism to take screenshots using intermission camera spots that could occur in the background.

I never finished it, though.

The bsp sources were kept in a separate folder to ensure proper separation, but rolled into the engine to ensure availability. 
@NightFright 
The DX8 build seems fine, but when using gl_texturemode "gl_nearest_mipmap_linear", it seems that floor/wall/ceiling and some model textures (e.g. health packs) keep bilinear/trilinear filtering

Not sure, I remember testing mostly only for the default settings and having to rewrite a few chunks of the MH Direct3D wrapper. It has a few (very few) weaknesses that the OpenGL version doesn't, apparently. I didn't notice that one it seems.

The DX8 version is runs on almost anything including really old Windows PCs with no Open GL drivers or a current one with bad Open GL drivers.

The Winquake version doesn't run for some reason for me at all, crashes during startup That is strange, I will attempt to see why that would be the case. 
MP3 Remap (id1/music/setmusic.cfg) 
Note: This is pretty much a literal implementation of what metslime's suggested back several months ago.

Mark V will run music/setmusic.cfg on startup. If Quake wants to play track 04, the remap will instead play sometrack.mp3 as indicated below.

This allows a single player release to have packaged mp3 music remapped and should be robust and flexible enough to be a standard.

Just include a setmusic.cfg in the music folder of the release.

Example contents:
setmusic 00 track1.mp3
setmusic 01 mytrack2.mp3
setmusic 02 somethingelse.mp3
setmusic 03 anothertrack.mp3
setmusic 04 sometrack.mp3 
Docs: Server Protocol 15 Compat, Intermission Fix 
1) Intermission Fix. Like ericw, I don't know exactly how or why the intermission fix works. Ben Jardrup's Enhanced GLQuake uses it. It works perfectly.

Mark V uses it.

http://forums.inside3d.com/viewtopic.php?f=3&t=5492

2) I documented the protocol 15 server compatibility. Coincidentally, this happened to be modelled after Enhanced GLQuake. The solution is essentially simple, but unfortunately requires numerous changes to the source code.

http://forums.inside3d.com/viewtopic.php?f=3&t=5593

In some ways, this fix doesn't matter as few people use a standard Quake engine. But for full backwards compatibility it is nice to have. 
 
@Baker, you should consider just using 'cd remap' instead of your 'setmusic' command, that is if you want consistancy with DP+FTE too. 
@spike 
In FTE/DP would "cd remap 04 sometrack.mp3" be the equivalent of what I posted above? 
About Texture Filtering In DX8 Build 
Apparently a similar issue as the one described above (#519) happened during development of Quakespasm 0.90. According to bogworth, it was related to anisotropic filtering.

Quote bogworth:
"The combination of GL_TEXTURE_MAX_ANISOTROPY_EXT with values greater than 1 and GL_NEAREST appears to have vendor-specific behaviour - in my case, GL_NEAREST is ignored." and
"The problem appears for textures that are mipmapped (eg, not models), when gl_texture_anisotropy is greater than 1 and gl_texturemode is 1, 2 or 3."

I dunno if all of this applies (probably not, as I also had models with filtering changes being ignored), but maybe it helps with detecting and eliminating the problem.

Would be great if this got fixed since the DX build seems to be the only one properly working on my system right now (Winquake crashes and the vs2008 build shows weird texture issues). 
 
aye, in FTE, if its numeric then it goes and plays track%03i.mp3, otherwise it goes and plays the named path (with the same optional prefixes as other fake-tracks).
the same as 'cd play' and 'cd loop' commands.
the only catch is that you can only remap numbered tracks, not named ones.
I'm not entirely sure on which paths that DP assumes it might be in (if any), but the rest is the same as far as I am aware (for supported file formats).

what annoys me, is that world.sounds is a float. I'm tempted to add a hack and specially parse the entity lump to read it as a string, and update the server's svc_cdtrack generation to just play that string instead somehow. numbered tracks are so old fashioned!
plus, they get in the way of map compilations.
of course, this assumes mappers would use it. 
@spike 
Ok, the text vs. numeric. I was thinking that would be required and you validated that. Well, the better compatibility with existing engines ...

Numbered tracks are what Quake expects and built into the pipeline. I think working with them sucks. I'd almost suggest a wordspawn key, but I fear a drastic proliferation of them. 
@FrightNight 
Well, I am glad the Direct X version is working for you.

Does current Quakespasm work properly for you?
What about a previous Mark V or Fitz 0.85? I'm trying to determine issue.

The current Open GL Mark V uses non-power of 2 (July 2014), uses stencil operations more (this one), varies from Fitz 0.85 by using the texture matrix instead of the mesh alterations (been that way since 2013).

The Direct X version of Mark V uses neither the texture matrix nor the Fitz 0.85 meshing alterations so the model textures will look like --- well --- JoeQuake/GLQuake/Requiem --- which are stretched and not crisp like FitzQuake.

It is done like that to support external textures for models in a straightforward way.

I had intended to revisit it in the Direct X version, but that time won't be coming soon. I don't think, at least.

I'm trying to mentally picture whether or not non-power of 2 would solve that and if the Direct3D 8 wrapper supports that. 
@NightFright, @Baker 
Would be great if this got fixed

It can't be fixed because D3D doersn't support it.

What D3D offers for filter modes is one of three options (for each of min/mip/mag):

- Point
- Linear
- Anisotropic

Various combinations of Point and Linear then correspond to the GL filter mode names, but the important thing here is that Anisotropic is also it's own filter mode, and anisotropic filtering is only enabled if you select that filter mode.

So in other words you can't combine point filtering (what GL calls nearest) with any form of anisotropic filtering.

This restriction still exists in D3D11 where the options (excluding shadow map comparison states) are:

D3D11_FILTER_MIN_MAG_MIP_POINT
D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR
D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT
D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR
D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT
D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR
D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT
D3D11_FILTER_MIN_MAG_MIP_LINEAR
D3D11_FILTER_ANISOTROPIC

Again you'll see that most of these modes correspond to the GL modes (D3D11 has a few extra ones) but that D3D11_FILTER_ANISOTROPIC is it's own mode and can't be combined with point/nearest filtering.

This isn't the kind of engine bug that you can fix in code, it's a limitation of the D3D specification. That's a difference between GL and D3D - GL keeps things loose and floppy and allows implementation-specific wriggle-room, D3D doesn't.

I'm trying to mentally picture whether or not non-power of 2 would solve that and if the Direct3D 8 wrapper supports that.

Non-power-of-two is the ideal solution but I don't remember if the wrapper supports it. D3D8 does support non-power-of-two textures so it would be easy enough to add a pseudo-extension check and code up the loader (be careful when reducing miplevels for non-power-of-two textures though). 
 
Thanks MH. I think npot solves the problem in a way that won't interfere with external textures, when I rebuild I'll tell the wrapper to say it has npot texture support. 
 
(be careful when reducing miplevels for non-power-of-two textures though).

Whoa ... what's this? Is there a size limitation of the mip textures of some sort? 
What Works (for Me) 
I had been using Mk V r15 before on the same machine without problems. Quakespasm 0.90 also works.

Strangely enough, the WinQuake build works on my Samsung NP-NC10 netbook (Intel Atom N270, 1.6 GHz, 2GB RAM).

The sad thing is that right now, I am stuck with DX8 since the OpenGL build (vs2008, I assume) doesn't work, either. When I load the start map for example, huge chunks of textures are missing. In the "Welcome to Quake" hall with the three skill selection gateways, it cuts away pretty much half of the screen. Never had any problem like this. 
@Baker 
Whoa ... what's this? Is there a size limitation of the mip textures of some sort?

No, no limit. You just need to be aware that the standard for both GL and D3D specifies round-down (so for a dimension of, say, 63, the next miplevel would become 31, not 32).

A simple way is to check "if ((width & 1) || (height & 1))" for a miplevel, then send it through GL_ResampleTexture instead of GL_MipMap. IIRC the stock Fitz code does some funky stuff with miplevel reduction (reducing each dimension separately) so you'll have some fun there.

I believe that the latest Quakespasm has non-power-of-two support so it'll probably be useful to cross-check with that.

For D3D9 the check is "if (!(d3d_DeviceCaps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) && !(d3d_DeviceCaps.TextureCaps & D3DPTEXTURECAPS_POW2))" for full non-conditional support, and if memory serves it's the same in 8, so you can report that GL_ARB_texture_non_power_of_two is supported if they're met (everything else is done outside of the wrapper).

Conditional support means that the address mode must be clamp and you can't use mipmaps which is broadly equivalent to GL_ARB_texture_rectangle (although the GL extension is weird in that it uses integer texcoords). You'll want full non-conditional support in the general case, although conditional might be OK for MDLs (provided you're still doing the Fitz thing of not mipmapping them).

D3D should also not suffer from crap like "we'll say we support non-power-of-two textures but will emulate everything in software if you try to actually use them". 
OpenGL Issue 
Here is a screenshot of what the game looks like for me with the vs2008 build. Skyboxes, liquids and teleport surfaces are totally screwed.

http://i.imgur.com/Q3KPRbA.jpg 
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.