Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Deffers

The New(er) Technology: A High-Effort Thread For High-Level Discussion About Enhancing Doom Source Ports

Recommended Posts

So a bit of preface: sometime in December of last year I had the privilege of having @Insane_Gazebo drop by my chat while I was playing Godless Night. For those not in the know, that's a GZDoom project that uses advanced engine features, and it had me thinking about the future of DOOM source port derivatives in the future. Nowadays, there's whole publishing studios like Hellforge Studios and individual efforts like Scumhead that specialize in putting out commercial products using the DOOM engine and, in particular, GZDOOM. This is interesting to me, because it means that there's real money behind the further development of the GZDOOM engine; I started talking about how the engine might be enhanced in the future and Gazebo told me about how Hellforge people were in particular contributing in part to vkdoom, which attempts to modernize GZDoom's rendering to take better advantage of Vulkan rendering features. The results are impressive, to say the least, but they still kept me curious. There's plenty of directions I think that idTech1 derivatives could be taken, and I wanted to have a discussion about it.

 

I did my due diligence and tried to see what other kinds of threads had been in place about this, and the main thing that came up was this thread from a year ago that seemed to fit my concept less than perfectly. The conversation was kept very pie-in-the-sky and some of the feature "suggestions" were frankly more bizarre than anything. So I decided it would be cool if we could try a high-effort thread about what source-port features or implementations you think might be feasible and why they might expand the design space of what is possible with idTech1 derivative source-port engines-- ideally with examples of what you think might assist in implementation. A background of any history you're aware of tackling your problem or idea could also serve as a useful historical reference. I think it's a good idea to keep the discussion open to all source-ports. I figure I'll start with an example to give an idea:

 

Dynamic/Aleatoric Audio

 

If you're familiar with modern videogames, you're probably familiar with the ways that modern videogames use dynamic soundscapes. As DOOM fans, you might be familiar with Mick Gordon's work for DOOM 2016 and DOOM Eternal. As those of you who followed the controversy of his mistreatment are likely to know, DOOM 2016 and Eternal's music weren't produced as individual tracks-- they were produced, rather, as loops which blended into one another in complex ways, and when you listen to, say, Transistor Fist, that's a specific additional arrangement that Mick Gordon produces and arranges for your listening pleasure. This is a concept known as aleatoric music, and is typically performed in modern audio production through middleware like wwise. Needless to say, this is very expensive, proprietary software that usually has specialist integration packages for big engines like Unity and Unreal. Let's get this out of the way right away-- it's impossible for an open-source development effort focused primarily on pushing forward a game engine to come close to even remotely offering anything that could match a full, professionally integrated middleware solution like wwise. Suggesting otherwise is unserious.

 

That doesn't mean the DOOM community isn't pushing up against the limits of what we do have, however-- or that there might not be a way to provide for greater capabilities. Like many of you, I was blown away by the March release of MyHouse.wad, an instant classic in the scene in part because of incredible work by @Jimmy and @esselfortium on their remixes of DOOM 2's classic D_RUNNIN (Jimmy's Entryway At The End of Time and Essel's memory=entryrrrr/////). The intended effect is quite obvious to grasp while playing the map-- you start with the authentic D_RUNNIN, only to transition to Entryway At The End of Time after moving into the second house, and then going into entryrrrr after having proceeded into the full breadth of myhouse's... uniqueness. Only, there's just one problem. Due to the limitations of how GZDOOM processes audio, there's an abrupt cut from D_RUNNIN into Entryway At The End of Time and again when we hit memory=enryrrrr//////, alongside a notable hitch when switching tracks. If you're familiar enough with GZDOOM's engine, it's going to spoil the surprise because you know right away that the only reason for D_RUNNIN to skip like that is if you're no longer listening to D_RUNNIN. That happened to be my particular experience. It was still an effective, memorable moment because of Jimmy's artistry and, in particular, the subtlety and restraint demonstrated in the track going sideways giving me an opportunity to focus on the gameplay (and IMO Esselfortium's approach simply utilized its own dreamlike nature to sell the hard cut), but it would have been nice especially with Jimmy's example if there had been a way to a) pre-load the music to minimize the performance impact of it playing and b) have some way to switch between tracks seamlessly on some particular looping point.

 

Myhouse isn't the only project that has run up against these kinds of limitations. The Ashes series has an incredible soundtrack from PRIMEVAL and has frequent occasion to switch from one track to another-- I think the project could be enhanced moving forward with more advanced musical technology. Almost all the Hellforged projects seem to use music switching too, but obviously I can't say off the top of my head.

 

Personally, I think the DOOM community's artistic inclinations could be served with some sort of dynamic or aleatoric solution. And, while, again, something like wwise's complicated features exists well outside of the scope of what it is possible for an open-source team working primarily for free with a handful of A-players working through a publisher for money, I believe that there might be software packages for simple-loops that are in-scope and might be supported by other groups. In preparation for making this thread I researched my suggestion a little bit and discovered the Open Adaptive Music Library on Github-- an MIT-licensed piece of code that offers intro loops, main loops, and conditional loops. It's sadly no longer being maintained, and its existing plugins primarily support Unity and Godot, but I believe that it demonstrates a proof of concept and an existing codebase that can be worked off of. I believe that if there were interest in the community for these kinds of features, they could be implemented and maintained. With the implementation of the multiple loops I think the community would likely be able to push the envelope even beyond just seamless looping for mindgames like MyHouse or more effective switching for setpieces like Ashes. I'd be interested to see how a more developed technical base could be pushed by a community that's already full of so much extreme talent. 

 

Obviously, of course, that's the caveat-- if there's interest. That's part of why I felt inspired to make this thread. I find the movement to further push the capabilities of the GZDOOM engine in particular and idTech1 derivatives in general to be fascinating, and while I don't really feel I have the capabilities to contribute directly to those efforts (and thus no right to demand any given feature), I feel like high-level discussion in a format that can be readily referenced might prove useful to those efforts over the long-term. I intend no offense to the people who are doing actual work by this, of course, I just think providing suggestions as productively as possible in a time where there's some commercial movement, no matter how minimal, might be a good idea. If you, as a reader, agree, feel free to reply to the thread and engage with the suggestion or submit your own suggestion with similar standards.

Share this post


Link to post

Seamless switching of tracks would be a killer feature! As you mentioned, memory=entryrrrr///// was designed around the hard cut, but it would've been really cool if Entryway At The End Of Time could've snuck in seamlessly with the change going unnoticed at first.

 

In general, I tend to prefer linear music over dynamic music for games, as it more easily allows for more complex song structures (and also, it's less work...), but there are definitely cases where it would be a great asset to have.

Share this post


Link to post

iirc there's an ACS script you can put in to fade music in and out, not a crossfade but would be less jarring than a hard cut (Ashes and My House are both GZDoom so this is useable). iirc @Bridgeburner56 has used this (and I've jacked it as well) for putting in more dynamic music into boss fights in our maps.

 

it'd be very nice to have a proper crossfade if I'm being totally honest, to totally smooth over musical changes.

Share this post


Link to post

For the record, you can fade music in/out via ACS scripting (although true crossfade is not possible). If you want examples I've used it extensively in Bastion of Chaos and the Age of Hell demo. There's an example script on the wiki too

https://zdoom.org/wiki/SetMusicVolume

Share this post


Link to post
6 hours ago, esselfortium said:

Seamless switching of tracks would be a killer feature! As you mentioned, memory=entryrrrr///// was designed around the hard cut, but it would've been really cool if Entryway At The End Of Time could've snuck in seamlessly with the change going unnoticed at first.

 

 

Me and Veddge briefly talked about this. One of the things he asked me about was if GZDoom had any music crossfading, which the answer being no. I proposed a system where instead of the tracks being played as music, we played them as audio through actors. Since each channel can have their individual volumes adjusted via A_SoundVolume, I thought this would be an adequate solution. Veddge brushed it aside as possibly being too complicated, and I agreed, naively not realizing at the time the intent there was to hide music. I absolutely could have done it then :P

Share this post


Link to post
Posted (edited)

GZDoom is already a damn good FPS engine. The only thing I can think of is - more thorough documentation of the features it already has. The zdoom wiki is pretty good but imagine something like the Godot engine docs. GZD is miles ahead of many Quake-based engines out there in terms of documentation for example, I'm not complaining.
I'd say that's one of the most important things to get people outside the Doom community interested in using the engine for their projects.

Share this post


Link to post
Posted (edited)
On 4/30/2024 at 6:48 PM, esselfortium said:

Seamless switching of tracks would be a killer feature! As you mentioned, memory=entryrrrr///// was designed around the hard cut, but it would've been really cool if Entryway At The End Of Time could've snuck in seamlessly with the change going unnoticed at first.

 

In general, I tend to prefer linear music over dynamic music for games, as it more easily allows for more complex song structures (and also, it's less work...), but there are definitely cases where it would be a great asset to have.

 

On 4/30/2024 at 11:14 PM, Major Arlene said:

it'd be very nice to have a proper crossfade if I'm being totally honest, to totally smooth over musical changes.

I'm glad you both think the idea has promise! (And just to clarify, I'm pretty sure the Ashes series uses fadeout transitions wherever feasible rather than just hard-cutting).

 

On 4/30/2024 at 7:55 PM, taufan99 said:

So, something like either iMuse, System Shock Random Song Generator, or even both?

I hadn't heard of iMuse, but given its age it's actually likely a great example of what featureset might be achievable for a team of the size that maintains GZDOOM, particularly given the primacy of MIDI (and tracker music secondarily) in the community. Given that it's patented though, I suspect there's little to no codebase to work off of-- but the patent's expired, so maybe the ideas there could be relevant?. The random song generator may or may not be feasible, but my lay understanding is the fact that the community primarily works off MIDI would make this much more possible. I'm kind of scared to imagine what a MIDI note generator might do performance-wise to the engine given some of the assumptions about architecture that have to be made, but that's a little outside my paygrade.

 

On 4/30/2024 at 11:57 PM, kevansevans said:

 

Me and Veddge briefly talked about this. One of the things he asked me about was if GZDoom had any music crossfading, which the answer being no. I proposed a system where instead of the tracks being played as music, we played them as audio through actors. Since each channel can have their individual volumes adjusted via A_SoundVolume, I thought this would be an adequate solution. Veddge brushed it aside as possibly being too complicated, and I agreed, naively not realizing at the time the intent there was to hide music. I absolutely could have done it then :P

 

So hold up-- even though it's not possible to crossfade, with A_SoundVolume you'd be able to do the transition from D_RUNNIN to Entryway At The End of Time seamlessly? Is that because they'd both initialize at the same time with respect to one another? I wonder how that would translate to implementing crossfades for music tracks given the existing codebase. It seems like it shouldn't be that hard to add just a basic crossfade, but it might come up short compared to a more thorough, integrated loop-based implementation.


EDIT: In fact, in theory, if you could do this with A_Soundvolume, wouldn't it be possible to mock up an implementation of a loop-based audio setup altogether that way, notwithstanding the complexity?

Share this post


Link to post
26 minutes ago, Deffers said:

I hadn't heard of iMuse, but given its age it's actually likely a great example of what featureset might be achievable for a team of the size that maintains GZDOOM, particularly given the primacy of MIDI (and tracker music secondarily) in the community. Given that it's patented though, I suspect there's little to no codebase to work off of-- but the patent's expired, so maybe the ideas there could be relevant?.

There's an implementation in ScummVM.

Share this post


Link to post
1 hour ago, Deffers said:

I hadn't heard of iMuse, but given its age it's actually likely a great example of what featureset might be achievable for a team of the size that maintains GZDOOM, particularly given the primacy of MIDI (and tracker music secondarily) in the community. Given that it's patented though, I suspect there's little to no codebase to work off of-- but the patent's expired, so maybe the ideas there could be relevant?. The random song generator may or may not be feasible, but my lay understanding is the fact that the community primarily works off MIDI would make this much more possible. I'm kind of scared to imagine what a MIDI note generator might do performance-wise to the engine given some of the assumptions about architecture that have to be made, but that's a little outside my paygrade.

iMuse has been reverse-engineered for The Force Engine, and it also features on the Dark Forces Remastered. I believe GZDoom can use that for the codebase.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×