Post news Report RSS 2024 Quake Omega Effects Challenge Series #1 of 20

2024 Quake Omega Effects Challenge Series #1 of 20 is the Intermap Travel Demo now available for download.

Posted by on

April 3: Linux Overhaul Closer (Zircon Beta #43 - Win64, Linux)

Zircon on Linux is much improved in the next version including having a Window icon.

April 2: DarkPlaces Can't Write Long Strings

After drilling into some Linux differences, I discovered to my surprise that DarkPlaces can't write long strings to files on Linux. The function FS_VPrintf is only able to write strings of around 16384 characters on Linux, but this limitation does not occur on Windows.

The QuakeC string limit in DarkPlaces is 16384 characters and most of the Quake tools including even the Quake 3 map compiler have line limits like 16384 or 4096.

It is actually not entirely clear where the limitation is in this case and the limitation may not be in DarkPlaces but the behavior of specific C library functions as they are in Linux.

The reason it isn't clear, is that is easier for me to fix it than find out what the nature of the limitation is.

I side stepped this issue by using varadic string expansion I wrote in the past that I know does not have that limitation (I've had it kick out untold gigabytes of variadic string expansion in the past and then had it do it a thousand times to speed test it).

This was a frustrating limitation to discover -- largely because debugging in Linux is much harder than on Windows (Visual Studio is the most efficient IDE anywhere) -- and no doubt the string limitation is not the fault of DarkPlaces (because it works ok in Windows and it looks like it should work for Linux too, but when sizes get larger it stops working) nor something that DarkPlaces would be much expected to do. With Zircon, some of the features like embedding screenshots into a save game do need this.

April 2: Linux Version Under Microscope

Conducting a thorough examination of the Linux version of Zircon on Ubuntu. I have noticed some file system differences and a few differences here and there. And some things that can crash.

Time to make the Linux version nicer.

April 1: Linux Testing

My plans for Release #44 involve hardening/reworking the cvar system and resolving some outstanding issues on Linux. Release #43 for Linux needs some extra work and I plan to put it through a test battery and solve some inconsistencies. You can always fallback to Release #41 for Linux until Release #44 is out.

April 1: Release #43

  • Quakespasm model appearance "overbright models" in Options menu ("gl_overbright_models 1")
  • New Load Game with screenshots. When saving a game, a screenshot is written into the save game file. These save game files are compatible with all modern engines (DarkPlaces/FTE/Quakespasm + derivatives will ignore the data). "sv_save_screenshots 0" disables and uses the old Load Game menu.

loadg

  • "playvideo" with support for .dpv, animated GIF and streaming jpeg images. In classic DarkPlaces, this command would only work right if a map is loaded, Zircon will correctly present the video even if no map is running. A video or animated GIF must in the quake\id1\video folder (where id1 is the gamedir), this is the way it was written in DarkPlaces.
  • "playloop" will play a sound with the sound looped.

More in read me.

March 31: Hitting Cvar System

The cvar system in DarkPlaces Beta -- back in October when Zircon Beta began -- had a cvar system that had issues when changing gamedir. I eliminated most of the issues, but I am aware of a couple of outstanding and rarely relevant imperfections in the Zircon Beta implementation.

Pictured: Zircon Super High Resolution Texture Experiment. I compiled this as a Quake 3 map and the lighting is not quite right. I have an experiment I am slowly working through. All these textures are 2048 x 2048 or larger.wolfsuper2I plan to look through the q3map2.exe map compiler source and see what I need to do to get larger light falloff without increasing light intensity. I already use "my own" q3map2 compiler because I use the J.A.C.K. map editor and no q3map2.exe out there works with J.A.C.K. Valve 220 .map output, so I had to make one.

DarkPlaces Beta has since made some changes to the cvar system, I was considering trying to implement them but after some thought -- the changes in DarkPlaces Beta to fix the issues missed the elephant in the room -- the cvar reset system in DarkPlaces Beta is too complicated with too many moving parts.

I am reworking the cvar system in Zircon Beta to "collapse into simplicity". Thinner and more streamlined code that does less by design because it fixes the underlying issues.

Not exciting stuff and not really what I want to be working on, but it needs done.

When I finally get this next version out, it will be a great next version!

March 29: ForceLoop

I noticed "playvideo" did not work in DarkPlaces with no map running. It actually did, but the console is drawn over it because the console always draws if no map is running. Zircon now has this situation resolved and "playvideo" works in the console.

its a button

Pictured: A Button. In Quake, when you press a button, the frame of the entity is set to 1 and then a different texture is used.

I wanted to play a looping sound. It is fairly manageable to loop a .wav (it still isn't fun, though). I wanted to use .ogg. Eventually found an ogg tutorial on how to loop an ogg with Audacity, it was a pain and it also didn't work.

DarkPlaces has a flag SOUNDFLAG_FORCELOOP that should work in QuakeC, but nothing exposed to the command line, so I have added a "playloop" command. (A side note: this reminds me that the DarkPlaces QuakeC function "soundlength" does not appear to correctly return the duration of a sound in seconds, the number returned was too short or too long in every test I recall doing -- I just don't recall which way it was wrong. Note to self: Does sound format matter? Does it do it correctly for .ogg but not .wav perhaps?)

Did some testing with "gl_overbright_models 1" that I implemented in Zircon -- which makes models overbright in a way that looks similar to Quakespasm and all the various derivatives of Quakespasm.

"gl_overbright_models 1" in Zircon currently is also overbrighting healthboxes and such, which isn't right -- I now have it only apply overbright if the model is not Q1BSP (healthboxes and ammo boxes are Quake maps, yes -- in 2014 DarkPlaces they even show up with the "maps" command).

And "gl_overbright_models" in now in the menu a few items under mouse speed.

Reason: In my opinion, one of the most frustrating things about playing single player in DarkPlaces can be if you cannot see the monsters. Zircon feels very much like the other vanilla Quake engines except it has all of the countless extra DarkPlaces capabilities, and I have tried to expose enough controls to make sure "too dark" monsters is never an issue.

If you enable "gl_overbright_models 1", in looks nearly identical to Quakespasm (or any engine based off Quakespasm, which is essentially everything not fteqw) and also is one way brighten the monsters.

"gl_overbright_models 1" however, can look wrong with some DarkPlaces content. So it is a menu item easily turned on, not a default value.

March 28: Loadgame Menu Finalized

Finalized the loadgame menu that uses savegame screenshots embedded within savegames (these savegames are compatible with every modern engine including Quakespasm and derivatives and DarkPlaces).

loadg

The internal wiring was something I had to continually work on, not so much for the savegame process or even the menu, but rather that DarkPlaces Beta which Zircon Beta is based on, did not have the code completed for dynamic textures (textures that can change).

Doing this correctly also means that video restart, gamedir change and a number of other things need handled because DarkPlaces more completely changes game directory than vanilla Quake engines do -- it is more similar to a partial engine restart.

So quite a bit of deep coding to get this A+++.

Zircon Release 43 is basically done, after some final checks and testing it will be out, probably tomorrow.

March 27: A Compatibility Investigation

While trying finalize the new save game menu (optional) that contains screenshots, loaded a save that occurred on E1M1. I go in water near secret Mega Health, and there there is a lift to the green armor, I already did this in the save game so this is the 2nd visit.

I hear a beep (talk.wav) at the top of the lift to the green armor, there is no centerprint message.

Zircon has enhanced investigation tools, I type "developer_stuffcmd 1" and repeat the above gameplay. I see that I am getting a centerprint. It is a zero-length string.

I load up Quakespasm. Load the DarkPlaces save game. I still get the beep.

I start up E1M1 fresh in Quakespasm, I go through the secret area twice.

NO BEEP.

I look at the QuakeC for id1 progs, I see that after a secret is triggered .. it sets self.message = "".

It checks if (self.message) to decide to do centerprint or not in the QuakeC and if it does, it will also do the "talk.wav".

I check the DarkPlaces VM opcodes -- fortunately the DarkPlaces developers put some comments from Spike in that section.

From the perspective of the DarkPlaces engine, that self.message that is "" is an existing message that happens to be a zero-length string. (This is my current interpretation of what I am seeing).

DarkPlaces: if (self.message) where self.message is "", my guess is that this evaluates as true.
Quakespasm: if (self.message) where self.message is "", I imagine this evaluates as false.

But is this guessed different behavior due to the OP code or where the string is set to ""?

DarkPlaces has string handling that is incredible, but this is an example of some subtle behavior differences.

In the future at some point, Zircon will have a compatibility mode that eliminates this type of thing as a problem. In fact, I did a test when I added protocol 999 to the engine.

The easiest way to solve this is put a Quakespasm VM inside Zircon as an option. If I recall, this is about 200 KB bytes. The main reason Zircon does not already have this is that I would need to do a lot of wiring up the networking to do it right.

March 26: JPEG Stream

Added the ability to play video also via a "JPEG stream". Wanted a final no-dependencies option for video that does not impose color palette limitation.

Trying to wrap everything up and might have some sort of playable single player demo to go along with it.

March 25: Very Easy Video Cutscenes

It was quite a bit of work writing a streaming GIF decoder, but the next Zircon can easily play animated gifs from the console via "playvideo yourgif.gif". Combined with "play video/yoursound.wav", this is a simple and very portable way to be able to include video cut-scenes in a mod.

I want the option of being able to put small video cut-scenes easily in a mod.

"playvideo blue.gif"

playgif

(blue.gif is in the quake\id1\video folder)


Although I successfully completed the .dpv video support in Zircon Beta -- in DarkPlaces Beta that feature was incomplete and not easy to do with their new rendering system -- the DarkPlaces Video format (.dpv) requires a lot of work to make the files.

This animated gif decoder makes everything a breeze and animated GIFs are everywhere and it is super easy to convert mp4 to animated GIF with a click or a drag-drop.

I had a huge head start in writing the streaming GIF decoder due to the fine work of the github lecram/gifdec project, however it was written to read from disk (very slow) and was written to decode every frame entirely. I tore into it and eliminated those inefficiencies and then added a stream-query decode based off video time and snaps in with the DarkPlaces video playback system already in-place.

Note that DarkPlaces also has a captioning system available and some scaling and fade options.

Eventually, it is possible that Zircon will .mp4 or similar.

March 24: Animated GIF Support

Getting DarkPlaces Video (.dpv) fully implemented was important.

However, after some thinking, I decided to add animated GIF support as an additional optional "video format". The project at Github.com made this rather straightforward (that code is exceptionally well written).

On another note: I found this incredible project at GitHub called Windows Defender Remover .. Github.com ... Windows Defender had been turning itself back on regularly and spinning itself up and chewing up my CPU and otherwise being super-annoying .. I tried that Github release .. and Windows Defender is now no longer on my Windows 10 machine (take that!).

Animated GIF

The tools to make and precisely edit animated GIF are in abundance and incredible, I use them all the time and some great software like ShareX (the free video capture application for Windows) can record your screen as animated GIF (if you don't want .mp4 for some reason) and converting mp4 to animated GIF is easy.

Supporting Animated GIF in Zircon has proved to be easy and it is lightweight requiring no extra DLLs or libraries making it super-portable for in the future when I take the time to make Zircon Beta compile for platforms like Mac/Android (like what Zircon Alpha already has).

March 23: DarkPlaces Video

DarkPlaces has had a form of video playback for a long-time. In DarkPlaces Beta, the support for DarkPlaces Video Playback was not completely implemented with the new rendering system. (Zircon Beta is based off DarkPlaces Beta.)

The next Zircon Beta release will have DarkPlaces (.dpv) playback working.

vidvid

The above animation wouldn't be the one I would choose, but during testing I just took the first one I found and used it for the test in engine coding. This was a harder battle than expected, I thought it was going to be a medium-sized battle, but eventually I learned why this feature was incomplete -- with the new rendering system, most of the old code simply was incompatible.

March 21: Construction Time

Save game with screenshot preview is getting close to done. It is great! I will never want to use the old "Load Games" menu again, and I am very excited to be renovating this part of the engine.

(The "old" Load Game menu will remain an option.)

dozer


The DarkPlaces codebase has grown on me over time. When I first started modifying DarkPlaces, I found the source code very difficult to work with compared with traditional Quake engine source codes. The source code does have a certain percent that is written perhaps a little in a style I feel is hard to read (I rewrite that!)

But overall, I like the style of thinking found in the source code and I think the source code on a whole is incredible. Major learning curve at first, but I find working with it a pleasure and every once in a while something clicks and discover a brilliant line of thinking by LadyHavoc or one of the other major codebase authors.

Working with the Load Game, I discovered some nice hidden gems and philosophies in the DarkPlaces source code.

I look forward to finishing the Load Game menu. There are some other ideas that have come to light!

Not The First!

This will not be the first Quake engine to show screenshots of save games, the DirectQ engine had such a feature and actually loaded the map and rendered it. It was remembering that feature of DirectQ that prompted this idea.

March 21: Save Games Menu Upgrade

The save / load game menu in Zircon is getting an upgrade to include screenshots and how old the save game is. The save games displayed in the save game menu will also be from the current game directory only and will also include any saves made in the console.

shotty

Zircon will soon embed compressed 512 x 320 screenshots in save game files for enhanced load game menu.


DarkPlaces, FTE, Quakespasm and engines based off Quakespasm will ignore the extra data (this is effectively all Quake engines).

When I am looking to load a save game, I want to be able to see where I am in a map and know how old the save game is.

March 20: Blender OBJ Adjustment

Wanted to add some "level of detail" model support into Zircon. DarkPlaces excels at loading .obj models and I found some "dungeon themed" models I wanted to do level of detail testing with.

Level of detail support means using low polygon count alternate models with different distance cutoffs to render faster and more efficiently and use the higher polygon count models only when close enough for a player to experience the detail.

Blender exports to OBJ, however, I want to center the models and Noesis (a free model converter and an awesome one at that) has -recenter as an export option .. right?

braz

Well, I noticed that if I import OBJ into Noesis and then recenter or scale, the resulting OBJ has

  • More vertexes
  • More triangles

This doubling or tripling of the vertexes and triangles defeats the purpose of my level of detail model experiments, so I have added a new command in Zircon to perform this recentering/rescaling task so I can do this without Noesis. (The command is "objmodeladjust" and "objmodeladjust models/medieval/dungeon_torch.obj 20" will center the obj model and scaling increase by a factor of 20).

TODO: Send an email to Rich Whitehouse, the author of Noesis and let him know about this.

March 18: Underwater Sound Effect Muffle / EffectInfo Commands

intermap demo dm3x

Zircon Beta Release #42: Hemebond added snd_waterfx 1 to DarkPlaces Beta which muffles sound underwater, now has been added to Zircon and it is also in the effects menu after waterwarp. New commands: effectinfo_list will list effectsinfo.txt effects and effectinfo_dump will print the text of an effect to the console. Other changes, see readme.

So now Zircon can display effectinfo text and print Q3 .shader text for a texture along with tool_inspector 1 and showtex 1 to see the texture names. This gives Zircon the ability to examine almost anything about a map or mod and, if developing a map, to more easily be able to change it. (And with the "pak_this_map" command, makes the packaging of dependencies of a complex Q3 map into a single command).

Pictured: Map "Park"

Park is the start map of the Intermap Travel Demo (Challenge #1 of 20). It is a Quake 3 map format map has numerous textures and those textures have shaders -- the map is far more complex than, say, a Q1 map.

challenge4

Taking such a map and reducing it to it's actual dependencies -- which although I didn't count, is likely hundreds of textures files and text snippets of several different.shader files --- would take a serious effort by a human.

"pak_this_map" command reduced it to dependencies and copied needed contents into a single folder in 0.12 seconds.

With all .shader text required place in a single text file.

Reduce it to a command once, benefit forever! Let machines do machine work, they do it fast!

March 16: Linux Binary Now Available (Zircon Beta #41 - Win64 / Linux)

2024 Quake Omega Effects Challenge Series #1 of 20

Download: Intermap Travel Demo Version 1

Download: Zircon Beta Release #41 (Updated 🔥)

The Intermap Travel Demo takes what worked great in previous DarkPlaces works and then cranks the dial to 99999 before smashing the controls with a hammer and then blowing up the building!

It is a relentless single player campaign for Quake using the Zircon Engine (Release #41 or higher) ...

challenge3 challenge4


Open Source

The Intermap Travel Demo is open source, the QuakeC source code and .map sources are included with the release.

chal chalb


The Intermap Travel Demo hits hard non-stop again and again, you have to escape the base in 22 minutes in a visual delight.

challenge1 challenge2


chalshow


The ending packs an Easter Egg callback to Nehahra.

Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account: