Talk:GSS

Code in Heretic and Strife
You may find the following interesting/educational because it indicates that Doom may have been meant to be able to use these originally. The following source code is from Heretic, where the relevant portions are commented out, but in the disassembly of STRIFE1.EXE those portions are not commented out and are live code. Some comments are added by me. /* From I_SOUND.H */ typedef enum { snd_none, snd_PC, snd_Adlib, // note presence of AdLib as a distinct sound card snd_SB, snd_PAS, snd_GUS, snd_MPU,   // note presence of MPU (MIDI devices) as sound cards snd_MPU2, snd_MPU3, snd_AWE, NUM_SCARDS } cardenum_t;

/* From I_SOUND.C */ const char snd_prefixen[] = { 'P', 'P', 'A', 'S', 'S', 'S', 'M', 'M', 'M', 'S' };

int I_GetSfxLumpNum(sfxinfo_t *sound) { char namebuf[9];

if(sound->name == 0) return 0; if (sound->link) sound = sound->link; // sprintf(namebuf, "d%c%s", snd_prefixen[snd_SfxDevice], sound->name); return W_GetNumForName(sound->name);

} The disassembly from Strife shows the code as being live and not commented out as it is in Heretic (which doesn't support PC speaker sound effects). mov    eax, snd_SfxDevice

loc_11657: mov    eax, dword ptr ds:byte_1155D[eax]  ; This is a pointer 3 bytes before snd_prefixen[] push   edx sar    eax, 18h                           ; This is just optimizer non-sense for aligned reads (hence the pointer decrement) push   eax push   offset aDCS     ; "d%c%s" lea    eax, [esp+1Ch+a1] push   eax             ; a1                call    sprintf_ mov    eax, snd_SfxDevice mov    dl, ds:byte_11560[eax]             ; Actual pointer to snd_prefixen[] add    esp, 10h cmp    dl, 'P'                jnz     short loc_11697 mov    eax, esp        ; name call   W_CheckNumForName cmp    eax, 0FFFFFFFFh jnz    short loc_11697 mov    eax, offset aDprifle ; "dprifle" jmp    short loc_11699

loc_11697: mov    eax, esp        ; name

loc_11699: call   W_GetNumForName