Talk:GSS

From DoomWiki.org

Code in Heretic and Strife[edit]

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

--Quasar (talk) 13:40, 11 November 2015 (CST)