Jump to content

Things about Doom you just found out


Sigvatr

Recommended Posts

I didn't know IDKFA meant "id kicks fucking ass" until the IGN playthrough with Romero a couple years ago.

I always thought IDFA meant "Fire arms" and "IDKFA" meant "Keys (and) Fire arms"

Share this post


Link to post
wheresthebeef said:

I didn't know IDKFA meant "id kicks fucking ass" until the IGN playthrough with Romero a couple years ago.

I always thought IDFA meant "Fire arms" and "IDKFA" meant "Keys (and) Fire arms"

I always thought IDFA was "ID full ammo" and IDKFA was "ID keys full ammo."
It could be a double-acronym like BFG.

Share this post


Link to post

I kind of want someone to do a cover of DOOM with the original "doooom" voice included, or like made into a choir of sorts. Kind of like Lorcan's remix of Running from Evil that had one singing... well... "run! ing! from! evil!" as punctuation.

Share this post


Link to post

In vanilla doom, when the engine calls the unused sound DSCHGUN, it plays DSPISTOL in a higher pitch to simulate a different sound. The pitch shift doesn't happen in source ports because it's done by the DMX sound library. I wonder why this behavior wasn't used in the final product.

Share this post


Link to post
wheresthebeef said:

I didn't know IDKFA meant "id kicks fucking ass" until the IGN playthrough with Romero a couple years ago.


I always remembered the cheat as "I don't know fucking anything" when I first found out about it.

Share this post


Link to post

IDFA gives you Full Ammo (but no keys), and IDKFA gives you Keys and Full Ammo, so there's that.

EDIT: Tosi already said it, I didn't read his post until now.

Share this post


Link to post

The various IDBEHOLDx cheats, if you arrange their final letters in a particular way, spell out RIVALS.

Share this post


Link to post
fraggle said:

I've found the omgifol API to be a bit cumbersome and counterintuitive to use. I think my criticism might be that it tries too hard to provide high-level abstractions that I don't necessarily want or need. Often I just want the ability to open a WAD and decode particular lumps, but I have to jump through hoops to do that.


It's probably quite good for the things it's designed for (I know jmickle66666666 likes it a lot) but I have not found it very useful or intuitive for the things I've tried using it with. However, I've been trying to do much more low-level things than it was designed for, I'd hypothesise that you are also, fraggle. I've found the Python struct library good enough for composing and decomposing WAD files on the fly (often just in the REPL) without any helper layers on top.

Share this post


Link to post

Well at least that confirms the people who said it doesn't sound the same were indeed the ones who are right! This is a hilarious way to bust the "source code says so" being the end all be all sometimes.

Share this post


Link to post

TBQH the sound department is the one where the Source Code has been the most obfuscated/divergent from vanilla Doom, the other being the actual VGA output code.

There's actually a portable/generic C implementation of a sound mixing/pitching engine in the linuxdoom code, which is presumably what the NeXT testing version used too, but many ports don't use it: the most common approach is to delegate the actual low-level sound mixing to other sound libraries with additional, port-specific "glue" code, and in such implementations the pitch is the first thing to go.

Share this post


Link to post
Maes said:

There's actually a portable/generic C implementation of a sound mixing/pitching engine in the linuxdoom code,


I had forgotten about that and not fully realised the implications. here it is (sndserv). It has no pitch handling however.

Share this post


Link to post

As long as the ports are based on Doom's source code and at least remotely try to stay loyal to Doom's balance, which practically all ports do, those values are the same in them. However, the "Odds of what?" table is incorrect. It assumes a random number generator with even distribution of the generated random numbers, but Doom uses a small and uneven pseudorandom number table instead. Killing a Revenant in 1 SSG shot is actually impossible, and none of the other precise values is precise for real.

The information on doomwiki (in respective articles of particular monsters and weapons) is probably more accurate.

Share this post


Link to post
Jon said:

It has no pitch handling however.


It does, but it's "hidden" in that channelstepremainder and channelstep trickery: essentialy, the pointers into the sample buffers are treated as 16.16 fixed point numbers (hence the >>16 shifts). Pitches are converted to "channelstep" values in some other portion of the code, through a LUT if I recall, which define pitch shifts of up to -/+ 400%, even though the game used a smaller range of +/- 25%.

This implementation is also responsible for the original 64K sample len limit, It also doesn't handle sounds with different sample rates directly, but the fractional sample trickery can be used to assume a different mixing and sample rate, with some clever coding. In fact, the mixer is flexible enough to use as a crude modplayer, if one had to.

Share this post


Link to post
Pegg said:

Well at least that confirms the people who said it doesn't sound the same were indeed the ones who are right! This is a hilarious way to bust the "source code says so" being the end all be all sometimes.

Source code does say a pitch change is at least intended.

{ "chgun", false, 64, &S_sfx[sfx_pistol], 150, 0, 0 },
So, what's that 150 after the link? Pitch. Since chgun is the only link, it's the only sound to use a built-in pitch change (no volume change, though).

Share this post


Link to post

BTW, I found again how the pitch table steptable[256] is computed:

In soundsrv.c:

int steptable[256];

void initdata(void)
{

    int		i;
    int		j;
    
    int*	steptablemid = steptable + 128;


    /* snip */

    gettimeofday(&last, &whocares);

    for (i=-128 ; i<128 ; i++)
	steptablemid[i] = pow(2.0, (i/64.0))*65536.0;

    /* snip */

}
It's interesting that there's an attempt at randomization with the Linux/Unix gettimeofday() function call, even though the two returned values don't seem to be used in the process. So maybe the random pitch table was really meant to be random ;-)

According to the sfxinto_t struct, pitch is the 5th field:
struct sfxinfo_struct
{
    // up to 6-character name
    char*	name;

    // Sfx singularity (only one at a time)
    int		singularity;

    // Sfx priority
    int		priority;

    // referenced sound if a link
    sfxinfo_t*	link;

    // pitch if a link
    int		pitch;

    // volume if a link
    int		volume;

    // sound data
    void*	data;

    // this is checked every second to see if sound
    // can be thrown out (if 0, then decrement, if -1,
    // then throw out, if > 0, then it is in use)
    int		usefulness;

    // lump number of sfx
    int		lumpnum;		
};
And more interestingly, the comment suggests that it's taken into consideration ONLY if a link is used (as does the volume field, which is why those fields are simply -1 in most sounds).

BTW, a pitch of "150", according to the steptable formula, would look into position 150 of the step table, which is constructed with a [-128,127] range. Therefore the 150th zero-based index would be position 22 of the pitch table, or, with the formula used: 2^(22/64) = 1.269, therefore a 26.9% higher pitch. Since floats are not used in Doom's code, it's converted to a 16.16 fixed_t number by multiplying with *65536.0 (even though it does not #include the <m_fixed.h> header).

I'm surprised the linuxdoom's sound code hasn't been given as much attention as other aspects. FWIW, for Mocha Doom I simply adapted what was included in Linuxdoom, with fixed-point arithmetic for pitches and all (the only enchancements I made, were allowing for a "48.16" fixed point format, in order to be able to play back longer samples than 64K, and take into account samples with different sample rates when applying mixing/pitch stepping).

Share this post


Link to post

I've just discovered that in E1M5 on UV there is a spectre stuck in the wall in the exit room. I haven't found that out before, because... well, spectres are hard to see.

Share this post


Link to post



So apparently I just found out these are found in the GBA Doom, separate from the status bar face that's actually used. Seems like the exploding face we see in the PSX port is also present.

...now if that comes from the Jaguar port, any idea how to see it? Rocket to barrel at point-blank does jack.

Share this post


Link to post
Maes said:

long, involved source code stuff

Jeffo2448 said:

I just found out the Baron of Hell and Hell Knight are an estranged couple

Ah, Doomworld.

Share this post


Link to post

MAP17 of doom 2, has a horde full of stuck spectres behind the red door. Romero sure improved in his mapping skills since doom 1.

Share this post


Link to post

They're deliberately stuck so instead of killing one and letting them all free, you can nab up that free armor and health. Pretty sure, anyway.

Share this post


Link to post

The font used in the "THE ULTIMATE" text in the Ultimate Doom poster we all know is Copperplate Gothic. Standard or Pro doesn't make a huge difference.

Share this post


Link to post
Doomkid said:

They're deliberately stuck so instead of killing one and letting them all free, you can nab up that free armor and health. Pretty sure, anyway.

Even if they weren't stuck in each other they would still be useless because they can't get downstairs anyways.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...